我正在使用 CoreData 来保存对话中的消息列表。
Conversation 是一个具有消息数组的托管对象。 在一种情况下,我试图删除对话中的所有消息。
for (UQMessage * message in self.tempConversation.chatMessages){
[self.tempConversation.managedObjectContext deleteObject:message];
error = nil;
[self.tempConversation.managedObjectContext.persistentStoreCoordinator lock];
if (![self.tempConversation.managedObjectContext save:&error]) {
NSLog(@"Can't Delete! %@ %@", error, [error localizedDescription]);
return;
}
[self.tempConversation.managedObjectContext.persistentStoreCoordinator unlock];
}
当我检查
self.tempConversation.chatMessages.count
没有任何变化。
当我尝试添加消息以及删除对话本身时,一切都运行良好。但我似乎无法删除一条消息。
是否有可能这样做,因为我不是要删除托管对象本身,而是要删除其中的另一个对象? 如果没有, Anyway around 呢?
编辑:
Messages 是 Conversation 中的一个 NSOrderedSet。 我发现这个有效(取自 thread ):
NSMutableOrderedSet *mutableItems = (NSMutableOrderedSet *)items.mutableCopy;
[mutableItems addObject:anItem];
items = (NSOrderedSet *)mutableItems.copy;
虽然我不确定这是不是要走的路。
最佳答案
首先,关于 Matt S. 的回答,您没有修改 self.tempConversation,因此您不必担心在迭代时改变数组。
另一方面,如果您的问题是 self.tempConversation.chatMessages.count 没有改变。那是正常的。您正在从 NSManagedObjectContext 中删除对象。但是数组没有被修改。因此,该数组仍然具有托管对象,但该托管对象已被删除。有那么容易吗。它是僵尸管理对象,因为它已从 MOC 中删除。尽管如此,该对象还没有从数组中删除。因此,您有一个属性 deleted 设置为 YES 的托管对象。它不再是 MOC 的一部分。
关于ios - CoreData - 删除托管对象内的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31190737/