0

当我向核心数据实体添加新对象时,它不会在我的 uitableview 中进行动画处理。尝试了很多东西,为我的 if 语句添加了一个整数,以查看我的托管对象是否发生了变化,是的,它确实进入了 if 语句。我可以稍后调用 reloadData ,它会将丢失的单元格放在 tableview 中,但我当然想用动画来做到这一点。

我应该什么时候放置 insertRow 方法?我尝试了很多点,但我得到一个错误,我试图添加第五行,而更新后只有 4 行或其他东西。

    - (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。它将帮助您管理数据,使用谓词和委托从 tableview 插入/更新/删除数据。虽然手动这样做是一种有效的解决方案,但您可能需要考虑 FRC。这是如何使用 FRC的链接。

第二

你在后台做核心数据工作很好。另一方面,如果您只将 1 个对象添加到一个相对较小的数据库中的核心数据中,您可能不会像您想象的那样为自己购买。让我担心的是对self.managedObjectContext. 由于您在后台线程上,您应该确保在后台使用上下文是安全的。此外,在您保存它之后(假设它正确设置为后台上下文)我看不到您将它合并到前台上下文中的位置。如果您认为您毕竟需要该背景上下文,请务必阅读并发和核心数据

于 2013-07-01T20:23:02.837 回答