2012-03-09 6 views
0

コアデータに問題があります。私はネストされたテーブルを持つアプリを持っています - 1つのテーブルはレッスンのリストを表示し、レッスンをクリックすると、出席した学生を示す新しいテーブルが表示されます。コアデータのバックグラウンドタスクによりデータが消失する

細かい動作 - 新しいレッスンと出席した生徒を追加しても、データが完全に表示されます。このデータを作成して保存した後、ランダムな時間(分ではなく秒)後に問題が発生します。レッスンは最初の表に表示されますが、空白に出席した生徒は表示されます。

シミュレータを停止してもデータはそのまま残っています。データはすぐそこにあります。

ビュー間でコンテキストを正しく渡すことはできません。以下に示す - 問題は、いくつかの背景の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 

これは私が異なった第二表の行為のためにフェッチさせるように思われる - フェッチがキャッシュオブジェクトをしないことを確認するために、異なる設定でプレイしてきたが、解決していないようです....

- (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、

ジョン。

関連する問題