Основная фоновая задача, приводящая к исчезновению данных - PullRequest
0 голосов
/ 09 марта 2012

У меня странная проблема с основными данными. У меня есть приложение с вложенными таблицами - одна таблица просматривает список уроков, нажимая на сегменты уроков, чтобы перейти к новой таблице, в которой показаны учащиеся, которые посещали.

Работает отлично - отлично отображает данные даже после добавления нового урока и посещаемых учеников. Проблема возникает через случайное количество времени (секунд, а не минут) после того, как я создал и сохранил эти данные. Урок все еще будет показан в первой таблице, но учащиеся, которые присутствовали на нем, пропустили.

Данные все еще там, как будто я останавливаюсь, затем запускаю симулятор - данные тут же.

Исключено неправильное прохождение контекста между представлениями. Кажется, проблема возникает после запуска некоторого фонового 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];

}

Любой, кто знает, какой может быть фоновая работа и почему она меняет работу моего извлечения, будет очень благодарен, так как это сводит меня с ума в течение многих дней.

Впервые задаю вопрос здесь, так что будьте нежны со мной;)

John

1 Ответ

0 голосов
/ 15 марта 2012

Удалось исправить это - казалось, была проблема с предикатом, который я использовал - изменив:

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

На:

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

Это начало работать - ятеперь последовательно получайте правильные данные, а не меняйте их после того, как, я полагаю, произошло автоматическое сохранение контекста / управляемого документа.

Все равно будет знать, почему это не так, если кто-то может ответить.

Джон.

...