【发布时间】:2014-07-11 21:04:16
【问题描述】:
我在使用以下代码时遇到了崩溃。 self.items 是 NSManagedObjects 的 NSArray,具有 String 类型的 "id" 属性:
NSMutableArray *allIDs = [self.items mutableArrayValueForKey:@"id"];
NSArray *presentIDs = // a subset of allIDs
[allIDs removeObjectsInArray:presentIDs];
这是崩溃消息:
'Unacceptable type of value for attribute: property = "id"; desired type = NSString; given type = __NSArrayM; value = ....
在调试器中打印出来会发现allID 是NSKeyValueSlowMutableArray,而不是常规NSMutableArray 的__NSArrayM。
所以我把它改成了这样,它可以工作了:
NSMutableArray *allIDs = [[self.items valueForKey:@"id"] mutableCopy];
这两个调用之间有什么区别会使前者崩溃但后者工作?我怀疑这与 KVO 和代理集合有关,但不太了解。
【问题讨论】:
标签: ios objective-c key-value-observing kvc