【发布时间】:2013-05-17 20:37:44
【问题描述】:
我有一个非常奇怪的问题,它快把我逼疯了。
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 类是我编写的一个类,其中包含一些更简化的与数据库交互的函数。
【问题讨论】:
-
imagem = img;肯定有问题 - 你用不同的指针覆盖指向新创建对象的指针。我还不明白你的逻辑,但也许你必须将img的属性复制到imagem。 -
其实也已经试过这段代码了[image setCategoria: img.categoria]; [图片集标题:img.titulo]; [图像集Descricao:img.descricao]; 【图片集图片:img.imagem】;但我在调试输出中得到 null
-
放弃你的
SQLite类并使用标准的核心数据方法。 -
我不明白你的意思,但无论如何都没有帮助我......而且我写的SQLite类工作得很好,实际上它里面有标准方法,只是一个更简单的使用,而不是用 10 行代码重复数据,只用一个。
标签: ios xcode sqlite core-data