0

私は最近 Core Data と UIManagedDocument を扱っていて、いくつか質問があります。

UIManagedDocument を開く UITableViewController があります。ここで、情報を tableViewCotroller にダウンロードし、その情報をデータベースに保存して、テーブルビューを更新します。ホームボタンからメイン画面に入り、アプリを再度開くと、データベースのデータを appdelegate で操作したいと考えています。したがって、appdelegate の適切なメソッドで、データベースを開き、必要なエンティティを取得して、必要なオブジェクトのプロパティを変更します。これでうまくいきました。なんとかデータベースを開き、データベースから必要なオブジェクトを取得しました。

私の問題は、appdelegate でデータベースからデータを変更したときに発生します。appdelegate メソッドが完了した後、同じデータベースから tableview のデータを再取得しようとしましたが、この時点では、appdelegate で呼び出されたメソッドで行われた変更がデータベースに登録されていないためです。appdelegate 内で変更が行われた直後に、UIManagedDocument のメソッドを上書きするために saveToURL を呼び出してみました。また、managedobjectcontext で save: メソッドも試しました。データベースが更新されるように変更を保存する正しい方法は何ですか?

Ps: これは iPad で書いているので、コードをアップロードできませんでした。後でアップロードします。

ありがとう

4

1 に答える 1

0

それが正しい方法です。NSManagedObjectContext を変更してから保存します。saveToURL は非同期であることを思い出してください。そのため、最も可能性の高い問題は、テーブル ビューでフェッチを実行するまでに保存が完了していないことです。そこで、完了ブロックの出番です。おそらく、完了ブロックでテーブルビューにプロパティを設定して、フェッチを発生させることができます。何かのようなもの

// appdelegate
[self.mainDatabase saveToURL:self.mainDatabase.fileURL
            forSaveOperation:UIDocumentSaveForOverwriting
           completionHandler:^(BOOL success) {
               if (success) {
                   myTableView.context = self.mainDatabase.managedObjectContext;
                }
           }];

// TableView
- (void)setContext:(NSManagedObjectContext *)newContext {
_context = newContext;
NSArray *fetchResults = [_context executeFetchRequest:someFetchRequest error:&error];
// update model etc.
}
于 2013-02-13T15:09:56.633 に答える