Ios 类不符合密钥的键值编码
我有以下错误:Ios 类不符合密钥的键值编码,ios,swift,nspredicate,Ios,Swift,Nspredicate,我有以下错误:xctasertrue失败:抛出“[valueForUndefinedKey:]:此类不符合密钥静态文本的键值编码。” 代码如下: let predicate = NSPredicate(format: "(self.staticTexts[%@].exists == true) AND (self.staticTexts[%@].exists == true)", message, nameString) XCTAssert(app.collectionViews.childr
xctasertrue失败:抛出“[valueForUndefinedKey:]:此类不符合密钥静态文本的键值编码。”
代码如下:
let predicate = NSPredicate(format: "(self.staticTexts[%@].exists == true) AND (self.staticTexts[%@].exists == true)", message, nameString)
XCTAssert(app.collectionViews.childrenMatchingType(.Cell).elementMatchingPredicate(predicate).exists)
在第二行抛出错误
我看了其他答案,也有同样的错误,这主要是由于有一个不同类的变量引起的,但是我看不出这个错误的可能性。此外,我还检查了谓词的格式是否正确
如何消除此错误?请确保您的
staticText
属性是dynamic
或以其他方式可用于objc(例如,通过将其标记为@objc
)。Swift不会生成符合KVC的访问器,除非它认为需要
或者,在此处使用非预测的内容。在不需要时动态创建属性会带来性能成本,这就是为什么Swift不会自动执行此操作的原因。因此,仅仅为了让单元测试能够访问它而将其标记为动态的可能是一个糟糕的权衡。显然,当我将谓词应用于静态文本和单元格,然后尝试访问谓词中的静态文本时,错误消失了。那么比如说,
let predicate = NSPredicate("self.title like %@", message)
app.descendantsMatchingType(.StaticText).elementMatchingPredicate(predicate).exists
将消除错误。什么类型是
statictext
,父类是什么类型?符合键值编码的变量必须是属性,或者必须具有显式getter和setter方法。