我在尝试将数据存储到具有多对多关系的核心数据对象时,得到 Cocoa错误1570 。
日志文件中出现错误:
2012-05-25 12:02:38.919 TestProject[5059:12e03] DetailedError: {
NSLocalizedDescription = "The operation couldn\U2019t be completed. (Cocoa error 1570.)";
NSValidationErrorKey = conversation;
NSValidationErrorObject = "<Messages: 0x933e190> (entity: Messages; id: 0x933e1d0 <x-coredata:///Messages/tF3A62C22-456B-41EB-B9A4-0BA1E6738A6337> ; data: {\n conversation = nil;\n conversationID = nil;\n createdAt = nil;\n messageID = nil;\n nickname = nil;\n originNetwork = nil;\n text = nil;\n timestamp = nil;\n userImageURL = nil;\n})";
}
具体关系是对话&lt; ---&gt;&gt;消息,或者一个对话可以有多条消息,每条消息只属于一个对话。
在我的模型中,这两个NSManagedObject都是可选的。
我的问题是,如何在对话中正确存储消息对象?
我知道它与集合有关,但我还没有正确实现它。
非常感谢任何和所有特定或抽象的代码片段!
谢谢!
答案 0 :(得分:3)
这取决于您是否使用NSManagedObject子类。如果你(我喜欢这样做),你有一个ASConversation
和ASMessage
类(前缀是什么),那么你有Xcode为你自动生成它们,你可以使用一些东西像:
NSManagedObjectContext *moc; // exists
ASConversation *conv =
[NSEntityDescription insertNewObjectForEntityForName:@"Conversation"
inManagedObjectContext:moc];
// … set values on the conv
ASMessage *msg =
[NSEntityDescription insertNewObjectForEntityForName:@"Message"
inManagedObjectContext:moc];
// … set other parts of the message
[conv addMessagesObject:msg];
如果您将Message
正确的反向关系设置为Conversation
作为一对一,那么当您向{save
发送moc
时,应该为您设置所有相关关系。 1}}。
如果你没有子类,你必须使用通用的方式,更多的痛苦恕我直言。
// Assume conv and msg exist as above, but both are of NSManagedObject types
NSMutableSet *set = [conv mutableSetValueForKey:@"messages"];
// Changes to the above set are managed by Core Data for you.
[set addObject:msg];
然后像以前一样保存。请检查您是否也在关系上设置了可选项 - 可可错误1570是“未设置强制值” - 但它也可以应用于关系。