0

対多関係を持つコア データ オブジェクトにデータを保存しようとすると、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です。または、1 つの会話が複数のメッセージを持つことができ、各メッセージは 1 つの会話に属します。

私のモデルでは、これらの NSManagedObjects は両方ともオプションです。

私の質問は、メッセージオブジェクトを会話に適切に保存するにはどうすればよいですか?

セットと関係があることは知っていますが、まだ適切に実装していません。

すべての具体的または抽象的なコードスニペットは大歓迎です!

ありがとう!

4

1 に答える 1

3

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

逆の関係をMessage後ろから1対1として正しく設定している場合は、に送信するConversationときにすべてを設定する必要があります。savemoc

サブクラスがない場合は、一般的な方法を使用する必要があります。これは、私見ではもう少し面倒です。

// 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は「必須値が設定されていません」-しかし、関係にも適用できます。

于 2012-05-26T11:06:15.740 に答える