2012-03-09 6 views
0

코어 데이터에 이상한 문제가 있습니다. 중첩 된 테이블이있는 앱이 있습니다. 한 테이블은 수업 목록을보고 수업을 클릭하면 참석 한 학생을 보여주는 새 테이블로 이동합니다.코어 데이터 백그라운드 작업으로 인해 데이터가 사라짐

잘 작동 - 새로운 수업과 참석 한 학생을 추가 한 후에도 데이터가 완벽하게 표시됩니다. 문제는이 데이터를 생성하고 저장 한 후 임의의 시간 (분이 아닌 초) 후에 발생합니다. 수업은 첫 번째 표에 계속 표시되지만 공백에 참석 한 학생에게는 표시됩니다.

시뮬레이터를 중지 한 것처럼 데이터가 그대로 남아 있습니다. 데이터가 바로 있습니다.

보기간에 컨텍스트를 올바르게 전달하지 않을 가능성이 배제되었습니다. 아래 그림 - 어떤 배경 SQL 코드가 실행 된 후 문제가 발생하는 것 같습니다 :

2012-03-09 17:08:16.772 Club Manager[5147:12f1b] CoreData: sql: COMMIT 
2012-03-09 17:08:16.774 Club Manager[5147:12f1b] CoreData: sql: BEGIN EXCLUSIVE 
2012-03-09 17:08:16.775 Club Manager[5147:12f1b] CoreData: sql: UPDATE ZSTUDENT SET Z_OPT = ? WHERE Z_PK = ? AND Z_OPT = ? 
2012-03-09 17:08:16.776 Club Manager[5147:12f1b] CoreData: sql: UPDATE ZSTUDENT SET Z_OPT = ? WHERE Z_PK = ? AND Z_OPT = ? 
2012-03-09 17:08:16.777 Club Manager[5147:12f1b] CoreData: sql: INSERT INTO ZLESSON(Z_PK, Z_ENT, Z_OPT, ZDATE) VALUES(?, ?, ?, ?) 
2012-03-09 17:08:16.786 Club Manager[5147:12f1b] CoreData: sql: INSERT OR REPLACE INTO Z_2STUDENTSATTENDED(Z_2LESSONSATTENDED, Z_4STUDENTSATTENDED) VALUES (11, 2) 
2012-03-09 17:08:16.787 Club Manager[5147:12f1b] CoreData: sql: INSERT OR REPLACE INTO Z_2STUDENTSATTENDED(Z_2LESSONSATTENDED, Z_4STUDENTSATTENDED) VALUES (11, 1) 
2012-03-09 17:08:16.788 Club Manager[5147:12f1b] CoreData: sql: COMMIT 
2012-03-09 17:08:16.791 Club Manager[5147:12f1b] CoreData: sql: pragma page_count 
2012-03-09 17:08:16.792 Club Manager[5147:12f1b] CoreData: annotation: sql execution time: 0.0014s 
2012-03-09 17:08:16.793 Club Manager[5147:12f1b] CoreData: sql: pragma freelist_count 
2012-03-09 17:08:16.795 Club Manager[5147:12f1b] CoreData: annotation: sql execution time: 0.0019s 

이 내 다르게 2 테이블 행위에 대한 가져 오기 할 것 같다 - 여러 설정을 연주했는지를 가져올 수 있도록하지 않습니다 캐시 개체 만 해결하지 않는 것 같습니다 ....

- (void) setupFetchedResultsController 
{ 
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"]; 
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"ddMMyyyy"]; 
    request.predicate = [NSPredicate predicateWithFormat:@"ANY lessonsAttended = [cd] %@", self.lesson]; 
    request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"lastName" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]]; 
    [request setShouldRefreshRefetchedObjects:YES]; 
    [ request setReturnsObjectsAsFaults:NO]; 

    self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request 
                    managedObjectContext:self.lesson.managedObjectContext 
                     sectionNameKeyPath:nil 
                       cacheName:nil]; 

} 

사람은 백그라운드 작업이 될 일을 알고 내 가져 오기 작업은 매우 감사이로 수신 할 방법 변경 이유 일 동안 나에게 화를 운전하고있다.

처음 그래서 나와 함께 부드럽게 여기에 질문을)

답변

0

는이 문제를 해결 관리 - 내가 사용 된 술어에 문제가있을 듯 - 변경 :

request.predicate = [NSPredicate predicateWithFormat:@"ANY lessonsAttended = [cd] %@", self.lesson]; 

에 :

request.predicate = [NSPredicate predicateWithFormat:@"ANY lessonsAttended.date = [cd] %@", self.lesson.date]; 

그것은 작동하기 시작 - 지금 consisten 컨텍스트/관리 된 문서의 자동 저장이라고 추측 한 후에 올바른 데이터를 얻지 않고 변경하십시오.

누구나 답변 할 수 있다면 왜 이렇게 다른지 알 수 있습니다.

REgards,

존.

관련 문제