私は非常に奇妙な問題を抱えており、それが私を夢中にさせています。
シナリオは、サーバーから更新を受信するローカル データベース (コア データ) を持つアプリです。最も関連性の高いコードのみをここに投稿します。
以下のコードは、アップデートのダウンロードを開始する前に呼び出されます。その目的は、テーブルに復元するデータのダウンロード中に問題が発生した場合に、すべてのレコードをテーブル 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 は最初のテストで実行され、2 番目のケースにも入るため、無効ではありませんが、この出力では
NSLog (@ "\ nTítulo:% @" imagem.titulo);
NSLog (@ "\ nDescription:% @" imagem.descricao);
NSLog (@ "\ nCategoria:% @" imagem.categoria);
私はすべてのオブジェクトに対して Null を取得します。オブジェクトがもはや彼女ではないかのようです。
これに関する最も一般的なエラーは、NSMutableArray が初期化されていないことですが、ご覧のとおり、初期化されています。
たとえば、変数の代わりに NSUserDefaults out にデータを保存するテストを行いましたが、同じ問題がありました。
言い忘れましたが、NSMutableArray oldImages はインスタンス変数です。
問題はありますか?
注: クラス SQLite は、データベースと対話するためのいくつかの関数を含む、より単純化されたクラスです。