У меня очень странная проблема, и она сводит меня с ума.
Senario — это приложение с локальной базой данных (основными данными), которое получает обновления с сервера, здесь я буду публиковать только наиболее актуальный код.
Этот код ниже вызывается перед началом загрузки обновления. Его цель — сохранить все записи в таблицу IMAGES, если у вас возникнут проблемы при загрузке данных для восстановления в таблицу.
//Passa contexto do ManagedObjectContext do appDelegate
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
managedObjectContext = [appDelegate managedObjectContext];
if ([SQLite count:managedObjectContext :@"IMAGENS"]!=0) {
NSMutableArray *fetchResults = [SQLite select:managedObjectContext :@"IMAGENS" :NULL];
oldImages = [[NSMutableArray alloc] initWithArray:[fetchResults copy]];
NSLog(@"SALVOU OLD IMAGENS");
}
Я проверил, действительно ли сохраняются тестовые данные корыта, пока проблем нет.
Этот другой код Trexo вызывается, если у вас возникли проблемы во время загрузки, и его цель - очистить таблицу и вставить объекты IMAGES, которые были сохранены в методе, который я разместил чуть выше..
-(void)recoverImages{
if ([oldImages count]!=0) {
NSMutableArray *fetchResults = [SQLite select:managedObjectContext :@"IMAGENS" :NULL];
//Se tiver Objetos salvos na tabela, todos serão apagados
if ([fetchResults count]!=0) {
for (Imagens *imagem in fetchResults) {
//Deleta objeto
[SQLite deletarImagem:managedObjectContext :imagem];
NSLog(@"deletou imagens no recover!");
}
for (Imagens *img in oldImages) {
Imagens *imagem = (Imagens *)[NSEntityDescription insertNewObjectForEntityForName:@"IMAGENS" inManagedObjectContext:managedObjectContext];
[imagem setCategoria:img.categoria];
[imagem setTitulo:img.titulo];
[imagem setDescricao:img.descricao];
[imagem setImagem:img.imagem];
NSError *er;
if(![managedObjectContext save:&er]){
NSLog(@"Houve um erro muito grave ao salvar imagem old");
}else{
NSLog(@"\nTítulo:%@",imagem.titulo);
NSLog(@"\nDescrição:%@",imagem.descricao);
NSLog(@"\nCategoria:%@",imagem.categoria);
}
}
}
}
}
NSMutableArray не пуст, потому что он выполняется в первом тесте, а также входит во второй случай, однако для этого вывода
NSLog (@ "\ nTítulo:% @" imagem.titulo);
NSLog (@ "\ nDescription:% @" imagem.descricao);
NSLog (@ "\ nCategoria:% @" imagem.categoria);
Я получаю Null для всех объектов, как будто объекты уже не ее.
Наиболее распространенные ошибки при этом — это не инициализация NSMutableArray, а, как видите, инициализация.
Например, я тестировал сохранение данных в NSUserDefaults вместо var, но возникла та же проблема.
Забыл упомянуть, что oldImages NSMutableArray является переменной экземпляра.
Вы видите какие-то проблемы?
ПРИМЕЧАНИЕ. Класс SQLite — это класс, который я написал, содержащий некоторые функции для упрощения взаимодействия с базой данных.