2011-05-10 3 views
0

코어 데이터 개체로 구성된 목록과 하나가 선택된 경우 열리는 표시 창이있는 창이 있습니다.NSArrayController 및 코어 데이터가 예상대로 작동하지 않습니다.

디스플레이 창에서 특정 동작은 코어 데이터 객체를 '읽기'로 표시합니다.

개체를 열려면 해당 개체를 표시 창에 전달하고 목록을 표시하는 sortDescriptors 및 filterPredicate를 사용하여 표시 창을 앞뒤로 이동할 수 있도록합니다. 주 창에는 때때로 개체의 하위 집합이 표시됩니다. 왜 내가 sortDescriptors와 filterPredicate가 필요한지).

열린 개체를 읽음으로 표시하면 완벽하게 작동합니다. KVO 덕분에 메인 윈도우에서 자동으로 업데이트됩니다.

그러나 디스플레이 창에서 다른 개체로 앞으로/뒤로 탐색 할 때 더 이상 읽지 않음으로 표시되지 않습니다. 코드를 살펴보고 코드가 실행되는지 확인하고 새 값을 확인하면 읽기로 표시되지만 기본 창이나 데이터베이스에는 반영되지 않습니다.

이 문제의 원인이 될만한 것이 있습니까? 나는 핵심 데이터 객체의 복사본을 만드는 것이 아니다. 표시 창은 NSArrayController를 사용하여 데이터를 가져오고, sortDescriptors와 filterPredicate가 데이터에 적용됩니다. 다음 개체를 얻을 내 코드는 다음과 같습니다

객체가 다른 NSArrayController에서 철수처럼 내가 사본을 코어 데이터의 일부 숨겨진 잡았다을하는 발생한 것 같은 정말 보인다 ...하지만 모든 실행
-(MyObject *object)nextObject { 

    // _object is the object being displayed by the display window. 
    // _listContainingObject is an NSArrayController set to Entity: Object 

    NSArray *list = [_listContainingObject arrangedObjects]; 

    NSUInteger positionInList = 0; 
    for (MyObject *object in list) { 

     if ([[[object objectID] URIRepresentation] isEqualTo: [[_object objectID] URIRepresentation]]) {   break; 
     } 
     positionInList++; 
    } 

    if (positionInList == [list count] - 1) return nil; 

    if (positionInList + 1 > [list count] - 1) return nil; 

    MyObject *object = [list objectAtIndex: positionInList + 1]; 

    return object;  

} 

같은 ManagedObjectContext를 오프 NSArrayController의 관리되는 객체 컨텍스트는 다른 컨텍스트를 사용하는 모든 컨텍스트를 반환하는 내 응용 프로그램 대리인의 속성에 바인딩됩니다. 나는이 머리에 꽤 열심히 머리를 긁적입니다.

답변

2

항목을 작업 할 때 managedObjectContext가 스크래치 패드의 역할을합니다. Managed Object Context를 실제로 저장할 때까지 Managed Objects에 대한 변경 사항이 데이터베이스에 반영되지 않습니다.

그래서 항목을 읽음 또는 읽지 않음으로 표시 한 후 컨텍스트를 저장해야합니다.

NSError *saveContextError=nil; 
if (![yourManagedObjectContext save:&saveContextError){ 
    // Handle the error 
    NSLog(@"managedObjectContext save error: %@",error); 
} 
+0

슬프게도 이것은 아닙니다. 변경이 이루어지면 언제든지 저장됩니다. –

+0

충분히 가까이 있기 때문에 나는 이것을 올바로 받아 들였습니다. 동일한 객체를 반환하는 응용 프로그램 대리인에도 불구하고 어떤 이유로 인해 다른 관리되는 개체 컨텍스트에서 작업하고있는 것으로 나타났습니다. 여전히 매우 불안정하지만 지금은 효과가있는 것 같습니다. –

관련 문제