Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在核心数据中正确存储一对多关系的数据_Iphone_Objective C_Ios_Core Data_One To Many - Fatal编程技术网

Iphone 在核心数据中正确存储一对多关系的数据

Iphone 在核心数据中正确存储一对多关系的数据,iphone,objective-c,ios,core-data,one-to-many,Iphone,Objective C,Ios,Core Data,One To Many,在尝试将数据存储在具有对多关系的核心数据对象中时,我遇到了一个Cocoa错误1570 日志文件中有错误: 2012-05-25 12:02:38.919 TestProject[5059:12e03] DetailedError: { NSLocalizedDescription = "The operation couldn\U2019t be completed. (Cocoa error 1570.)"; NSValidationErrorKey = conversat

在尝试将数据存储在具有对多关系的核心数据对象中时,我遇到了一个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})";
}
2012-05-25 12:02:38.919测试项目[5059:12e03]详细错误:{
NSLocalizedDescription=“操作无法\u2019完成。(Cocoa错误1570)。”;
NSValidationErrorKey=对话;
NSValidationErrorObject=“(实体:消息;id:0x933e1d0;数据:{\n会话=nil;\n会话id=nil;\n createdAt=nil;\n messageID=nil;\n昵称=nil;\n originNetwork=nil;\n text=nil;\n时间戳=nil;\n userImageURL=nil;\n}”);
}
特定的关系是对话>消息,或者一个对话可以有多条消息,而每条消息只属于一个对话

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

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

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

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


谢谢

这取决于您是否使用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];
如果您已将
消息
返回到
对话
的反向关系正确设置为一对一,则当您将
保存
发送到
主运行中心
时,应为您设置所有关系

如果你没有子类,你就必须使用泛型的方法,有点痛苦

// 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为“未设置强制值”-但它也可以应用于关系

这取决于您是否使用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];
如果您已将
消息
返回到
对话
的反向关系正确设置为一对一,则当您将
保存
发送到
主运行中心
时,应为您设置所有关系

如果你没有子类,你就必须使用泛型的方法,有点痛苦

// 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为“未设置强制值”-但它也可以应用于关系

看起来您的消息对象有很多未设置的属性(nil值)。对于消息实体,所有这些都是可选的吗?这些NSManagedObject是可选的,这是什么意思?如果
对话
消息
的反向关系,并且您没有将其设置为可选,那么这将是错误的。每次创建
Messages
对象时,都必须将其与
Conversations
对象一起传递。您的消息对象似乎有许多未设置的属性(零值)。对于消息实体,所有这些都是可选的吗?这些NSManagedObject是可选的,这是什么意思?如果
对话
消息
的反向关系,并且您没有将其设置为可选,那么这将是错误的。每次你创建一个
消息
对象时,它都必须与一个
对话
对象一起传入。昨晚你终于明白了这一点。我确实使用了子类,通过查看核心数据文档和经典配方项目,我发现了我的错误。不管怎样,谢谢你的发帖!非常感谢!昨晚终于弄明白了。我确实使用了子类,通过查看核心数据文档和经典配方项目,我发现了我的错误。不管怎样,谢谢你的发帖!非常感谢!