2013-03-05 1 views
2

핵심 데이터가 내 술어를 수정하려고 할 때 변경되지 않는 문제에 직면했습니다. 나는 왜 내가 가져온 속성이 나에게 정확한 결과를 보여주지 못하는지 (아래 코드를 보시오) 그리고 마침내 또 다른 커피 휴식을 한 후에 그것을 본 (잠깐!) 나의 가져온 물건이 잘 작동하기 시작한다는 것을 알기 위해 많은 시간을 보냈다. 데이터 모델을 업데이트하는 데 약간의 지연이 있습니까? 아니면 더 자주 휴식해야합니까?코어 데이터가 지연되어 데이터 모델을 새로 고 칩니 까?

-(void)printData{ 
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Empl"]; 
NSError *error; 
NSArray *empls = [[self managedObjectContext] executeFetchRequest:request error:&error]; 

for (NSManagedObject *emplMO in empls){ 

    NSString *output = [NSString stringWithFormat:@"%@ \n", [emplMO valueForKey:@"emplName"]]; 
    [self.managedObjectContext refreshObject:emplMO mergeChanges:YES]; 
    NSArray *allChairs = [emplMO valueForKey:@"allChairs"]; 
    output = [output stringByAppendingFormat:@" has %d chairs \n", allChairs.count]; 
    NSLog(@"%@", output); 
} 
} 

Here is my model.

+0

두 가지 : (1) 최근에이 객체가 얼마나 최근에 수정 되었습니까? 이 방법을 호출하기 직전 이었습니까? (2) refreshObject : mergeChanges :를 호출하는 목적은 방금 가져온 객체에 무엇입니까? –

+0

@TomHarrington (1) 몇 가지 유사 콘텐츠를 시도했습니다 : empl/assets이 cd에 삽입 된 직후 'printData'를 호출하고 나중에 - 응용 프로그램을 다시 시작한 후에 ('printData'의 결과가 잘못되었을 때 앱을 중지합니다. 청소/다시 빌드하십시오. 다음 번에 시뮬레이터를 실행해도 결과는 여전히 올바르지 않습니다.)이 문제의 규칙을 찾을 수 없었습니다. 그것은 갑자기 사라집니다. 디퍼링 후 페치 된 속성 (즉, 모든 랩톱에 대해 가져 오기)의 조건을 변경하려고 시도했지만 시뮬레이터를 다시 시작한 후에도 여전히 의자에 대한 결과가 표시되었습니다. 그래서 모델을 새로 고치는 데 약간의 지연이 있다고 생각합니다. –

+0

@TomHarrington (2) 내 경우에 유용 할 수 있다고 생각했습니다. –

답변

0

는 전체 응용 프로그램을 통해 하나의 NSManagedObjectContext를 사용하고 있습니까? NSManagedObjectContext의 인스턴스를 검색하거나 영구 저장소에서 개체를 "가져 오기"할 수있는 컨텍스트를 통해 응용 프로그램에서 하나의 "오브젝트 공간"또는 스크래치 패드를 .... 나타내는 Reference:

애플 개발자에서

해당 객체를 변경 한 다음 컨텍스트를 통해 변경 사항을 취소하거나 영구 저장소로 다시 커밋합니다. 컨텍스트는 개체의 변경 사항을 감시하고 실행 취소 관리자를 유지 관리하므로 실행 취소 및 다시 실행을 세부적으로 제어 할 수 있습니다.

두 개의 컨텍스트가있는 경우 소리가납니다. contextA에서 변경된 개체는 저장하기 위해 지속되어야하고 contextB가 다시 볼 수 있어야합니다. UIManagedDocument는 자동 저장을 수행합니다. 2 개 이상의 컨텍스트를 사용하는 경우 코어 데이터 업데이트/패치에 약간의 지연/차이가 나타날 수 있습니다.

+0

예, MOC는 단일입니다. 내 응용 프로그램은 작은 조건부 훈련 응용 프로그램이므로 추가 컨텍스트가 필요하지 않습니다. –

관련 문제