2013-05-17 159 views
0

我有一个很奇怪的问题,它让我疯狂。NSMutableArray不保存从数据库中检索到的对象(核心数据)

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代码被称为..

​​

的NSMutableArray的是不是无效,因为它在第一次测试运行,但是,也进入第二情况下,该输出

NSLog (@ "\ nTítulo:% @" imagem.titulo); 
NSLog (@ "\ nDescription:% @" imagem.descricao); 
NSLog (@ "\ nCategoria:% @" imagem.categoria); 

我得到空的所有对象,这是因为如果对象是不再是她。

最常见的错误是不初始化NSMutableArray,但正如你可以看到它被初始化。

我已经完成了保存NSUserDefaults的数据而不是var的测试,但也存在同样的问题。

忘了提及,NSMutableArray oldImages是一个实例变量。

你能看到任何问题吗?

注意:SQLite类是我写的一个类,它包含一些与数据库交互更加简化的函数。

+0

'imagem = img;'你肯定会遇到一个问题 - 你用新的指针覆盖了新创建对象的指针。我不明白你的逻辑,但也许你必须将'img'的属性复制到'imagem'中。 –

+0

其实也已经试过这个代码 [image setCategoria:img.categoria]; [image setTitulo:img.titulo]; [image setDescricao:img.descricao]; [image set图片:img.imagem]; 但是我在调​​试输出中得到空值 – jucajl

+0

抛弃你的'SQLite'类并使用标准的核心数据方法。 – Mundi

回答

0

后此问题的原因失去了足够的时间,我决定保存的NSMutableArray代替对象(图片*),节省NSDictionaty您的相关信息如下:

oldImages = [[NSMutableArray alloc] init]; 

     for (Imagens *img in fetchResults) { 
      if (img) { 
       NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:img.categoria,@"categoria",img.titulo,@"titulo",img.descricao,@"descricao",img.imagem,@"imagem", nil]; 

       [oldImages addObject:dic]; 

      } 
     } 

,然后进行恢复:

for (NSDictionary *img in oldImages) { 
       Imagens *imagem = (Imagens *)[NSEntityDescription insertNewObjectForEntityForName:@"IMAGENS" inManagedObjectContext:managedObjectContext]; 

       [imagem setCategoria:[img valueForKey:@"categoria"]]; 
       [imagem setTitulo:[img valueForKey:@"titulo"]]; 
       [imagem setDescricao:[img valueForKey:@"descricao"]]; 
       [imagem setImagem:[img valueForKey:@"imagem"]]; 

       NSError *er; 
       if(![managedObjectContext save:&er]){ 
        NSLog(@"Houve um erro muito grave ao salvar imagem old"); 
       }else{ 
        NSLog(@"\nTítulo:%@",[img valueForKey:@"titulo"]); 
        NSLog(@"\nDescrição:%@",[img valueForKey:@"descricao"]); 
        NSLog(@"\nCategoria:%@",[img valueForKey:@"categoria"]); 
       } 

      } 

由于某种原因不保存我的NSMutableArray对象(Images *),它是否与继承类NSManageObject有关?