我有一个非常奇怪的问题,它让我发疯。
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 上的测试,但也存在同样的问题。
忘了提一下, NSMutableArray oldImages 是一个实例变量。
你能看出有什么问题吗?
注意:SQLite 类是我编写的一个类,其中包含一些更简化的与数据库交互的函数。