ios - CoreData - 删除托管对象内的对象

标签 ios objective-c core-data ios8.1

我正在使用 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/

相关文章:

ios - Telegram iOS 应用程序无法使用 Xcode 6.1.1 构建

swift - 我可以根据子类对象的属性创建谓词吗?

ios - 如何从 iOS 13 中的 NSFetchResultsController 获取可比较的快照?

ios - 如何从实例方法返回 TableView?

iOS BLE 连接后立即断开连接,只有重启设备有帮助

iphone - 两个应用程序(iPhone 和 iPad)之间的核心数据 iCloud 同步

ios - 禁用计时器 iOS 上的按钮

iphone - 我可以在后台状态下查看iPhone的电池状态吗?

ios - 在 Xamarin iOS 中单击 tableview Delegate 时如何隐藏 View ?

ios - 获取小数点后两位的 NSDecimalNumber