0

新しいオブジェクトをコア データ エンティティに追加すると、uitableview にアニメーション化されません。多くのことを試し、if ステートメントに整数を追加して、管理対象オブジェクトに変更があったかどうかを確認しました。はい、if ステートメントに含まれます。後で reloadData を呼び出すことができ、欠落しているセルをテーブルビューに配置しますが、もちろんアニメーションでそれを行いたいです。

insertRow メソッドをいつ配置する必要がありますか? 私は多くの時点で試しましたが、更新後に 4 行しかないのに 5 行目を追加しようとしているというエラーが表示されます。

    - (void)insertNewObject
{
    int count = [self.detailItem.catRelations count];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^(void)
                  {
                      NSManagedObjectContext *context = self.managedObjectContext;

                      NSEntityDescription *entity = [NSEntityDescription entityForName:@"Image" inManagedObjectContext:self.managedObjectContext];
                      newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];


                      [newManagedObject setImageMetaData:localImageMetaData];
                      [newManagedObject setImageItself:localImageItself];
                      [newManagedObject setImageCreationDate:[NSDate date]];
                      [newManagedObject setImageName:localImageTitle];
                      newManagedObject.imageRelations = self.detailItem;
                      // Save the context.
                      NSError *error = nil;
                      if (![context save:&error]) {
                          NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
                          abort();
                      }


                      dispatch_sync(dispatch_get_main_queue(), ^(void)
                                    {
                                        if (count != self.detailItem.catRelations.count)
                                        {

                                            NSIndexPath *path = [NSIndexPath indexPathForRow:count+1 inSection:0];
                                            [imagesTV insertRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationLeft];
                                        }

                                    });
                  });
4

1 に答える 1

1

私はまだここで担当者を獲得しているので、コメントして質問することはできません. しかし、私はいくつかの指針を示し、おそらく物事を解決することができます.

初め

を調べてみるとよいでしょうNSFetchedResultsController。述語とデリゲートを使用してテーブルビューからデータを挿入/更新/削除することで、データを管理するのに役立ちます。手動で行うことは有効な解決策ですが、FRC を検討することをお勧めします。FRC の使用方法へのリンクを次に示します。

2番

バックグラウンドでコアデータの作業を行っているのは良いことです。反対に、比較的小規模なデータベースのコア データにオブジェクトを 1 つだけ追加する場合は、思ったほど自分を買わないかもしれません。気になるのは への電話self.managedObjectContextです。バックグラウンド スレッドを使用しているため、コンテキストがバックグラウンドで安全に使用できることを確認する必要があります。また、保存した後 (バックグラウンド コンテキストとして適切に設定されていると仮定)、フォアグラウンド コンテキストにマージしている場所がわかりません。結局、そのバックグラウンド コンテキストが必要になると思われる場合は、必ず同時実行とコア データを読んでください。

于 2013-07-01T20:23:02.837 に答える