Я новичок в данных Core и все еще разбираюсь в гайках и болтах, и эта ошибка беспокоила меня в течение многих часов, и я не могу найти решение.Любая помощь очень ценится.
Проблема заключается в следующем
У меня есть два представления, которые получают данные с сервера и обновляют интерфейс.Я настроил поток следующим образом:
view1 -> Отправка HTTP-запроса с сервера - Получение обратного вызова -> Сохранение данных в Coredata -> Чтение из базовых данных и отображение в пользовательском интерфейсе (обратный вызов и сохранение / чтение Coredata происходятв ViewController)
view2 -> отправка HTTP-запроса с сервера - получение обратного вызова -> сохранение данных в Coredata -> чтение из базовых данных и отображение в пользовательском интерфейсе (обратный вызов и сохранение / чтение Coredata происходят во ViewController)
Представление 2 повторяет этот процесс каждые 3 секунды, поскольку это экран автоматического обновления.
Проблема заключается в том, что всякий раз, когда я пытаюсь переключаться между представлениями 1 и 2 очень быстро, происходит сбой приложения с указанной выше ошибкой.Если я подожду несколько секунд на каждом просмотре (подождите, пока данные будут извлечены с сервера), он будет работать нормально.Я делаю что-то не так, что мне нужно изменить?
- (void) refreshData {
[super refreshData];
[[UserDataFactory sharedSingleton] refreshLoggedInUserDataAndRespondTo:self user:self.user];
}
- (BOOL) refreshDataCallback:(QExtendedHTTPOperation*)responseOperation {
[self saveToCoreData: responseOperation.responseArray];
NSMutableArray *tmp = [[NSMutableArray alloc] initWithArray:[self readFromCoreData]];
[self setData: tmp];
[tmp release];
[self.tableView reloadData];
return YES;
}
- (void) saveToCoreData:(NSArray *) responseArray{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"CoreView1" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setReturnsObjectsAsFaults:NO];
NSError *error;
NSArray *items = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];
for (NSManagedObject *managedObject in items) {
[self.managedObjectContext deleteObject:managedObject];
}
for (int i=0; i<[responseArray count]; i++) {
CoreView1 *coreView1_ = [NSEntityDescription insertNewObjectForEntityForName:@"CoreView1" inManagedObjectContext:self.managedObjectContext];
coreView_.id = [[responseArray objectAtIndex:i] id];
[self.managedObjectContext insertObject:coreView1_];
}
[self saveContext:self.managedObjectContext];
}
- (NSArray *) readFromCoreData{
NSEntityDescription *entity = [NSEntityDescription entityForName:@"CoreView1" inManagedObjectContext:self.managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entity];
[fetchRequest setReturnsObjectsAsFaults:NO];
NSError *error;
NSMutableArray *fetchedObjects = [[self.managedObjectContext executeFetchRequest:fetchRequest error:&error] mutableCopy];
[fetchRequest release];
return [fetchedObjects autorelease];
}
Это пример кода, который я использую, даже View2 имеет те же обратные вызовы и следует тому же потоку.
Редактировать 1 Забыл упомянуть об этом раньше, я всегда получаю ошибку в методе saveToCoreData.Кроме того, еще одна вещь, на которую следует обратить внимание: если я удаляю код для удаления объектов, все работает нормально (мне нужно удалить все существующие данные из таблицы перед сохранением обновленных данных).Не уверен, что происходит, хотя.