对于关键的staticTexts,类不符合键值编码

我有这个错误: XCTAssertTrue failed: throwing "[ valueForUndefinedKey:]: this class is not key value coding-compliant for the key staticTexts."

这是代码:

 let predicate = NSPredicate(format: "(self.staticTexts[%@].exists == true) AND (self.staticTexts[%@].exists == true)", message, nameString) XCTAssert(app.collectionViews.childrenMatchingType(.Cell).elementMatchingPredicate(predicate).exists) 

第二行引发错误。

我已经在SO上看了其他答案并且出现了同样的错误,而这主要是由于有一个不同类的变量引起的,但是我没有看到这个错误的可能性。 此外,我检查了谓词格式是否正确。

我怎样才能摆脱这个错误?

确保staticTexts属性是dynamic或以其他方式可用于objc(例如,将其标记为@objc )。 除非它认为需要,否则Swift不会生成符合KVC标准的访问器。

或者,在这里使用NSPredicate以外的东西。 在不需要时使属性动态化会产生性能成本,这就是Swift不会自动执行此操作的原因。 因此标记它是dynamic ,因此unit testing可以访问它可能是一个不好的权衡。

显然,当我将谓词应用于静态文本与单元格然后尝试访问谓词内的静态文本时,错误消失了。 例如,

 let predicate = NSPredicate("self.title like %@", message) app.descendantsMatchingType(.StaticText).elementMatchingPredicate(predicate).exists 

会摆脱错误。