延迟NSFetchedResultsController委托方法

时间:2012-04-09 02:23:32

标签: iphone objective-c ios core-data

我有一个基于UITableView的{​​{1}}。要在表中插入一个新行,我打开一个模态视图控制器,然后我点击保存按钮,它取消模态视图并导致我的NSFetchedResultsController委托方法(willChangeContent,didChangeObject`等)被触发,它动画插入一个新的细胞。一切都很好,但我希望用户见证这个动画,当模态视图消失时,动画已经完成。

如何在模态视图完全消失之前延迟此动画,以便用户可以看到动画?

1 个答案:

答案 0 :(得分:1)

这是一个很好的问题,有或没有NSFetchedResults控制器 - 你有一个观察模型的表vc,你希望用户在弹出或从另一个视图控制器解散后看到一个动画变化。

可能有更好的方法,但我最近在类似情况下做的事情是让表vc根据来自子公司(推送或模态呈现)vc的委托消息进行模型更新。

所以,在表vc中:

AddingVC *addingVC = [[AddingVC alloc] initWithDelegate:self];
[self presentModalViewController:addingVC animated:YES];

// adding to the model will happen in this vc, based on a delegate message

- (void)addingVcDidCreateAnObjectToAdd:(id)objectToAdd {

    // add to your model here
}

添加vc会这样做(我并不为此感到自豪,但它有效)...

- (void)thingIsReadyToAdd {

    SEL selector = @selector(addingVcDidCreateAnObjectToAdd:);
    [self.delegate performSelector:selector withObject:objectToAdd afterDelay:1.5];
    // 1.5 is on the long side, since the vc transition is about 0.5, so 1.0 is okay
}

在我的情况下,我使用了一个更传统的委托协议,将addsVC作为第一个参数传递,但是延迟这样做需要一个详细的NSInvocation,所以我在这里跳过它。对于那个困扰我的问题也是+1。我很好奇别人的解决方案。