Objective-C-CoreData中NSManagedObject的子类如何复写 hash 和 isEqual 方法
我借助CoreData从数据库中抓取到的若干对象. 懂CoreData的都知道会返回一个数组.
我的需求是: 我如果往数据库中新增一条记录,为了判断该对象不是已经存在的重复对象.我复写了父类的hash 和 isEqual 两个方法.
问题:
1. 我测试多次,如果仅仅是简单的 NSObject 的子类的话就可以没有任何问题的正常进行对象间的比较.但是在NSManagedObject的子类复写这俩方法就不行!
2. 是不是CoreData机制提供了另外的选择,如果有的话,麻烦您分享一下.
**好吧,我刚看了文档,说严禁覆盖. **
Methods you Must Not Override
NSManagedObject itself customizes many features of NSObject so that managed objects can be properly integrated into the Core Data infrastructure. Core Data relies on NSManagedObject’s implementation of the following methods, which you therefore absolutely must not override: primitiveValueForKey:, setPrimitiveValue:forKey:, isEqual:, hash, superclass, class, self, isProxy, isKindOfClass:, isMemberOfClass:, conformsToProtocol:, respondsToSelector:, managedObjectContext, entity, objectID, isInserted, isUpdated, isDeleted, and isFault, alloc, allocWithZone:, new, instancesRespondToSelector:, instanceMethodForSelector:, methodForSelector:, methodSignatureForSelector:, instanceMethodSignatureForSelector:, or isSubclassOfClass:.
报错如下:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
“判断该对象不是已经存在的重复对象”的标准是什么?是数据都相同?
能不能加一个比如uuid之类的用来判断?
Core Data保证了在同一线程下,同样的NSManagedObject取出来之后,他们就是同一个对象,可能是因为这个原因,所以不允许覆写你说的这两个方法。
变通的这样的实现能不能达到你的需求?
+ (AppAttachment *)insertOrGetAppAttachmentWithProperties:(NSDictionary *)properties inManagedObjectContext:(NSManagedObjectContext *)managedObjectContext
{
assert(properties != nil);
assert(managedObjectContext != nil);
AppAttachment *appAttachment = [AppAttachment MR_findFirstByAttribute:@"attachmentID" withValue:[properties objectForKey:@"id"] inContext:managedObjectContext];
if (appAttachment) {
return appAttachment;
}
else {
return [AppAttachment insertAppAttachmentWithProperties:properties inManagedObjectContext:managedObjectContext];
}
}
插入这条记录之前,查询这个ID是不是已经存在了,存在了就直接返回这条记录,否则新建一条,返回。