Nic*_*ing 21 core-data objective-c nsmanagedobject
我有一些代码循环遍历NSManagedObjects数组,并在找到存储在实例变量中的某条记录时停止.我能够设法查看它们是否是同一记录(不是等效记录,特定记录)的唯一方法是比较objectID的URIRepresentations.这肯定不是最好的方法.我正在做:
if ([[[obj1 objectID] URIRepresentation] isEqualTo: [[_obj2 objectID] URIRepresentation]]) {
NSLog(@"Match");
}
Run Code Online (Sandbox Code Playgroud)
以下代码永远不会匹配,即使我NSLog的objectIDs,并看到它们实际上是完全相同的.
if ([[obj1 objectID] isEqualTo: [_obj2 objectID]]) {
NSLog(@"Match");
}
Run Code Online (Sandbox Code Playgroud)
ImH*_*its 19
评论者是正确的,isEqualTo:在这种情况下不起作用,因为它们是NSManagedObjectID的不同实例.
你这样做的方式实际上是最好的方法,objectID是CoreData给定托管对象的唯一标识符,它是判断两个NSManagedObject实例是否指向持久存储中的同一记录的唯一方法.
Wie*_*nke 12
澄清:
ImHuntingWabbits是指isEqual:,但随后建议尼克坚持他的第一个实际使用的例子isEqualTo:.
Per Peter Hosey对帖子的评论isEqual vs isEqualTo,有一个区别,你最好使用isEqual:.
在目前的帖子之后,我最初用来isEqualTo:比较在Cocoa中运行良好的objectID网址,但是当我将这些代码移到iOS时,我收到警告"NSURL可能无法响应isEqualTo".当我换到时isEqual:,警告就消失了.
因此,如果您遵循这些示例,您应该这样做:
if ([[[obj1 objectID] URIRepresentation] isEqual:[[_obj2 objectID] URIRepresentation]] {
NSLog(@"Match");
}
Run Code Online (Sandbox Code Playgroud)
-isEqual:已针对CoreData中的NSManagedObjectID正确实现.我们一直使用带有-contains的集合:似乎原始海报混淆了-isEqual:with -isEqualTo:后者不应该使用.