自动生成的标准声明NSManagedObject
property 声明了这样的多对多关系:
@property (nonatomic, retain) NSSet *somethings;
...
@dynamic somethings;
将该声明更改为安全吗?NSMutableSet
? CoreData 组件是否仍能正常运行?
判断通过@dynamic
,它可能不在乎我是否使用NSSet
子类而不是NSSet
,但我不想重写很多代码才发现它不起作用。
根据苹果公司的核心数据编程指南 https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CoreData/Articles/cdAccessorMethods.html#//apple_ref/doc/uid/TP40002154-SW1,这应该始终声明为 NSSet。
如果您想要一个可变代理(基本上是核心数据集的可变版本并且工作原理完全相同),那么您可以使用该函数mutableSetValueForKey
像这样:
// myManagedObject is the managed object that has the somethings property.
NSMutableSet *mutableSomethings = [myManagedObject mutableSetValueForKey:@"somethings"];
mutableSomethings
然后可以修改为标准 NSMutableSet 并且somethings
将被更新并且 KVO 方法将被适当地调用。
但请注意,可变集的许多功能(例如addSomethingsObject
and removeSomethingsObject
)已在核心数据生成的访问器中提供,因此在许多情况下您不需要使用代理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)