学習プロジェクトでは、ユーザーが画像をキャプチャしてタグ付けできるアプリを構築しています。 CoreDataを使用してイメージとタグの名前を保存しています。このアプリでは、最初に、そのタグを持つ画像の数がすべてのタグを行サブタイトルとしてリストするUITableを表示します。ユーザーが写真を撮って1つ以上のタグでタグ付けできるアプリの別の部分があります。写真を撮ってタグを付けることはうまくいくようです。私はデータベースを見て、すべてが適切であることを見ることができます。iPhoneなぜ新しく挿入されたデータだけが私のUITableViewでfetchedResultControllerに関連付けられて表示されますか?
問題は、初めてアプリケーションを入力するときです。データベースに画像があるにもかかわらず、UITableViewに何も表示されません。アプリケーションを開いた後、写真を撮ってタグを付けると、UITableViewに表示され、画像カウントにはそのタグが付いたデータベースのすべての画像が反映されます。新しく追加された画像によって参照されない他のタグは表示されません。別の画像を撮り、他の画像に関連付けられたタグを追加すると、新しいタグがUITableViewに表示され、画像カウントにはそのタグを含むすべての画像が反映されます。それは、アプリケーションがデータベース全体ではなく、見たデータ(キャッシュ??)のみを認識していると考えられます。
どのようなコードが最も関連性が高いのかよく分かりませんが、私はfetchedResultsControllerをUITableViewにどのように取り付けるのかという問題が関係していると思われます。私は、ビューをレンダリングする前に、これはと呼ばれていることが確認できました
-(void) setupFetchedResultsController
{
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Tag"];
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]];
MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *managedObjectContext = [appDelegate.imagesDatabase managedObjectContext];
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext: managedObjectContext sectionNameKeyPath:nil cacheName: nil];
}
:ここでのviewDidLoad関数で呼び出される関数のコードです。誰かが何が起こっているのか光を当てることができますか?
問題の原因を突き止めました。上記の関数が、データベースのオープンが完了したときに呼び出される成功ハンドラ(UIManagedDocument openWithCompletionHandlerなど)の中で呼び出されていることを確認する必要があります。コードの後半で単に呼び出すか、成功ハンドラ内で切り替えられたBOOLを使用するだけでは十分ではありませんでした。 – codesweat