2012-05-25 2 views
0

대다수 관계가있는 코어 데이터 개체에 데이터를 저장하려고 시도하는 동안 코코아 오류 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})"; 
} 

특정 관계가 대화 < --- >> 메시지, 또는 여러 개의 메시지를 수있는 하나의 대화이며, 각 메시지는 정확히 하나의 대화에 속한다.

내 모델에서 이러한 NSManagedObjects는 모두 선택 사항입니다.

내 질문은, 어떻게 제대로 대화메시지 객체를 저장합니까입니까?

세트와 관련이 있다는 것을 알고 있지만 아직 제대로 구현하지 못했습니다.

모든 특정 또는 추상 코드 스 니펫이 많은 도움이됩니다.

감사합니다.

+0

메시지 개체의 속성이 많이 설정되지 않은 것 같습니다 (nil 값). 메시지 엔터티에 대한 옵션은 모두 선택 사항입니까? –

+0

예, 모든 것이 선택 사항입니다. – ArtSabintsev

+0

*이 NSManagedObjects는 무엇을 의미합니까? *? 'conversation'이'Messages'에 대한 역관계이고 선택 사항으로 설정하지 않았다면 오류가됩니다. 'Messages' 객체를 생성 할 때마다, 반드시'Conversations' 객체와 함께 전달되어야합니다. –

답변

3

NSManagedObject 하위 클래스를 사용하는지 여부에 따라 다릅니다. 당신이 (내가이 일을 좋아한다) 인 경우에, 당신은, 당신은, 엑스 코드는 당신을 위해 그들을 자동 생성이 (접두사가 무엇 인)을 ASConversationASMessage 클래스를 줄 당신은 같은 것을 사용할 수 있습니다

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으로 설정 되었다면 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은 "필수 값이 설정되지 않았습니다"- 그러나 관계에도 적용될 수 있습니다.

+0

어제 밤에 이것에 대해 알아 냈습니다. = p. 필자는 하위 클래스를 사용하고 Core Data 문서와 본질적인 Recipe 프로젝트를 보면 내 방식이 잘못되었다는 것을 알게되었습니다. 글쓰기 감사합니다. 감사합니다! – ArtSabintsev

관련 문제