gpt4 book ai didi

iphone - 正确存储核心数据中一对多关系的数据

转载 作者:行者123 更新时间:2023-11-28 20:35:18 24 4
gpt4 key购买 nike

我在尝试将数据存储在具有一对多关系的核心数据对象中时遇到了 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})";
}

具体关系是Conversations<--->>Messages,或者一个 session 可以有多个消息,每个消息恰好属于一个 session 。

在我的模型中,这两个 NSManagedObjects 都是可选的。

我的问题是,如何在对话中正确存储消息对象?

我知道它与集合有关,但我还没有正确实现它。

任何和所有具体或抽象的代码片段将不胜感激!

谢谢!

最佳答案

这取决于您是否使用 NSManagedObject 子类。如果你是(我喜欢这样做),你会有一个 ASConversationASMessage 类(前缀是什么),然后你有 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];

如果您正确设置了从 MessageConversation 的一对一反向关系,那么当您发送 时,所有这些都应该为您设置好保存moc

如果您没有子类,则必须使用通用方式,恕我直言,这会比较麻烦。

// 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];

然后像以前一样保存。请检查您是否还对关系设置了可选 - cocoa 错误 1570 是“未设置强制值” - 但它也可以应用于关系。

关于iphone - 正确存储核心数据中一对多关系的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10757866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com