2013-07-28 2 views
4

다음 인터페이스가있는 NSManagedObject가 있습니다.코어 데이터 코코아 오류 1570. 둘 이상의 엔티티 개체를 저장할 수 없습니다.

@class Organization, Person; 

@interface Assistance : NSManagedObject 
@property (nonatomic, retain) NSDate * date; 
@property (nonatomic, retain) Organization *organization; // Not optional, 1 to 1 
@property (nonatomic, retain) NSSet *persons; // 1 to many 
@end 

사람은 조직과 1-1 관계가 있습니다. 지원은 조직 과 1 대 1의 관계를 가지며 사람과 1 대 관계가됩니다.

항목을 저장하려고 처음 시도했지만 완벽하게 작동했지만 두 번째 시간은 아닙니다.

사례 시나리오 : 2013-07-26 00:00:00 +0000, 해당 조직 및 인물이있는 엔티티를 추가합니다.

앱을 다시 시작합니다. 현재 날짜 (7/27)에 대한 검색을 수행하고 아무 것도 찾지 않습니다. 응용 프로그램에서 항목을 편집하기 시작하여 MagicalRecord의 편리한 메소드 인 [Assistance createEntity]를 사용하여 새 항목을 만듭니다. 나는 즉시 날짜 (7/27)와 조직을 설정했다. Person 오브젝트가 추가되거나 제거됩니다. 다른 날짜를 선택하면, 나는 내가 setCurrentDate 방법 나 자신을 구현 한이 들어, 현재 지원 대상 기업을 저장하려고 :

- (void)setCurrentDate:(NSDate *)currentDate 
{ 
    if (assistanceWasChanged) { 
     NSLog(@"> > > Has changed, need to save with Persons {%i}, org {%@}, date {%@}", [self.assistance.persons count], self.organization.name, self.currentDate); 
//  [[NSManagedObjectContext defaultContext] saveOnlySelfWithCompletion:^(BOOL success, NSError *error) { NSLog(@"> > > 01:Assistance saved?"); }]; 
     [[NSManagedObjectContext defaultContext] saveOnlySelfAndWait]; 
    } 
    assistanceWasChanged = NO; 
    _currentDate = currentDate; 
    [self setCurrentAssistance]; // Tries to find Assistance with new date 
} 

그러나이 시간,이 저장되지 않습니다. 나는 코코아 오류 1570 (하지 못되는 필요한 모든 필드) 얻을 : 시간에 어떤 시점에서

> > > Has changed, need to save with Persons {1}, org {MSF}, date {2013-07-27 00:00:00 +0000} 
2013-07-27 20:23:41.017 -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8d61e50) → Saving <NSManagedObjectContext (0x8d61e50): *** DEFAULT ***> on *** MAIN THREAD *** 
2013-07-27 20:23:41.018 -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8d61e50) → Save Parents? 0 
2013-07-27 20:23:41.018 -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x8d61e50) → Save Synchronously? 1 
2013-07-27 20:23:41.018 -[NSManagedObjectContext(MagicalRecord) MR_contextWillSave:](0x8d61e50) Context DEFAULT is about to save. Obtaining permanent IDs for new 1 inserted objects 
2013-07-27 20:23:41.019 CoreData: sql: BEGIN EXCLUSIVE 
2013-07-27 20:23:41.019 CoreData: sql: SELECT Z_MAX FROM Z_PRIMARYKEY WHERE Z_ENT = ? 
CoreData: sql: UPDATE Z_PRIMARYKEY SET Z_MAX = ? WHERE Z_ENT = ? AND Z_MAX = ? 
2013-07-27 20:23:41.020 CoreData: sql: COMMIT 
2013-07-27 20:23:41.021 +[MagicalRecord(ErrorHandling) defaultErrorHandler:](0x6b3a0) Error: <Assistance: 0x9cb16c0> (entity: Assistance; id: 0x9e5ac00 <x-coredata://15A3-4C6D-4025-9131-3D51048/Assistance/p1> ; data: { 
    date = "2013-07-26 00:00:00 +0000"; 
    organization = nil; 
    persons = "<relationship fault: 0x8d80500 'persons'>"; 
}) 

는 조직 전무하다. 또한 '2013-07-26'날짜의 개체는 가져 오거나 편집 할 수 없습니다. 내 로그 문장에 표시된대로 내가 추가하려고하는 새 개체의 날짜는 '2013-07-27'입니다. 처음에는 CoreData가 오래된 데이터에 대한 포인터를 가지고 있다고 생각했지만, 그렇지는 않습니다. 처음 삽입 된 날짜는 가져 오지 않았습니다. .

@property (strong, nonatomic) Assistance *assistance; 

내가 뭔가를 놓친 거지 : 나는 응용 프로그램을 다시 시작하면 (첫 번째 개체 (7/26)이 아직 거기는 차이를 만드는 경우 의 지원 엔티티 객체 내 구현 파일의 속성이다 코어에 대해 데이터? 왜 새로운 엔티티 객체를 저장할 때 액세스되는 첫 삽입 된 개체인가? 그리고 왜 조직 전무입니까? 새 organisation을 생성하지 않는 것처럼

+0

조직을 설정 한 부분을 포함하여 새 개체를 만드는 코드를 표시 할 수 있습니까? – ophychius

+0

일이 잘못 될 수있는 곳이 많이 있습니다. 여기에서 가장 중요한 문제는 컨텍스트에 대한 아이디어를 아직 이해하지 못하고 있다는 것입니다. 객체는 컨텍스트에 연결되어 있으므로 데이터를 유지하려면 컨텍스트를 저장해야합니다. 이렇게하면 나중에 검색 할 수 있습니다. 나는이 코드에서 "잘못된"것을 보지 않고 있지만, 문제를 정확하게 지적 할 수있는 전체 그림이없는 것처럼 느껴집니다. – casademora

+0

@casademora 고맙다 사울! 컨텍스트에 대한 개념을 이해하고 있다고 믿고 싶지만 한 번 더 살펴 보겠습니다. 내 문제는 내 3 엔티티 중 2 개가 잘못된 관계의 다양성을 갖고 있다는 것이 었습니다. – Eric

답변

7

것 같습니다. 대신 새를 연결하고 Assistance 개체가 기존 organisation 인 경우 1 to 1이라는 관계로 인해 이전 Assistance 개체가 organisation과 관련되어 있습니다. 이는 핵심 데이터에 의해 자동으로 수행되어 사용자가 설정 한 구성의 무결성을 유지합니다.

따라서 새 organisation 개체를 만들거나 관계의 다양성을 변경하십시오.

+0

문제가 무엇인지 알았지 만, 당신 말이 맞습니다. 관계의 다양성을 바꿀 필요가있었습니다.저는 Assistance의 관계가 Organization과의 관계가 "하나"(관심있는 관계) 인 관계 만보고 있었지만 조직에서 Assistance까지의 관계는 "많은 사람"입니다 (Core Data는 이것에 관심이 있습니다. 비록 내가하지 않지만 관계) – Eric