NSManageObjectContext - 这个类无法用于关键值编码 @count 关键字。

9

我有一个使用RestKit库和CoreData的iOS应用程序。自从Xcode8之后,我看到的日志比以前多得多,其中一个对我来说毫无意义。

error: An observer of NSManagedObjectContextDidSaveNotification illegally threw an exception.  Objects saved = {
inserted = "{(\n)}";
managedObjectContext = "<_PFWeakReference: 0x600000621560>";
updated = "{(\n ... )}";
} 
and exception = [<_PFWeakReference 0x600000621560> valueForUndefinedKey:]: this class is not key value coding-compliant for the key @count. with userInfo = {
NSTargetObjectUserInfoKey = "<_PFWeakReference: 0x600000621560>";
NSUnknownUserInfoKey = "@count";

到目前为止,我能理解的是,一个对managedObjectContext的弱引用(上面的错误)使用了错误的键,但我无法找出如何进行调试。
与此问题相关的所有NSManagedObjects似乎都是集合。大多数来自于OneToMany或ManyToMany关系的NSSet。
然后我发现了这个 Apple文档:

除了@count之外的所有集合运算符都需要在运算符右侧使用键路径。

然而,我没有看到我所做的任何谓词或CoreData请求当前使用此键。
我重新生成了所有的NSManagedObject模型,并仔细检查它们之间的所有反向关系,但这并没有帮助我摆脱它。
这个应用程序运行得很好,但我找不到任何解决方法来消除这个警告。

2
我猜不是你在制作密钥,而是RKManagedObjectStore.m的第55行。 - JulianM
你有找到消除这个警告的方法吗? - el-flor
1个回答

1

我相信这个问题已经在PR 2449中得到解决,该PR已合并到开发分支。该PR包含this commit,似乎解决了这个问题。

我不确定这个PR是否已经合并到主分支,所以不确定它是否可以通过pods获得。但是你可以在你的podfile中指定一个特定的commit,而不是一个版本。所以如果你指定这个:

pod 'RestKit', :git => 'https://github.com/RestKit/RestKit.git', :commit => '9cbba9eb1b490c3c5e2873c8fba8e9c0fec1bf07'

此处所建议,它应该可以工作!

但也许那个提交与Swift 3不兼容,我不确定。但也许你没有使用Swift 3...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接