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

时间:2015-07-09 16:46:35

标签: ios swift nspredicate

我有这个错误:XCTAssertTrue failed: throwing "[<XCElementSnapshot 0x7fea978b1a10> 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上查看了其他答案并且出现了相同的错误,这主要是由于有一个不同类的变量引起的,但是我没有看到这个错误的可能性。另外,我检查了谓词的格式是否正确。

如何摆脱这个错误?

2 个答案:

答案 0 :(得分:4)

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

或者,在此处使用NSPredicate以外的内容。在不需要时使房产动态具有性能成本,这就是Swift不自动完成的原因。因此标记它dynamic只是因为单元测试可以访问它可能是一个不好的权衡。

答案 1 :(得分:1)

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

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

将摆脱错误。