我有一个模式视图控制器,它在自己的上下文中创建核心数据更改,当我单击完成时,它会保存更改(调度合并更改通知),通知委托并解散。在延迟后在对象上调用委托方法
我的问题是,我需要委托收到我的主要上下文与编辑上下文的变化合并后的消息。我希望委托调用在下一次运行循环中进行,但是我遇到了对象生命周期的问题。我想到了以下内容:
- 拨打电话
[delegate performSelector:withObject:afterDelay:]
但是看起来好像该邮件无法识别。我的委托符合NSObject
协议,但不包括具有延迟的执行选择器。 - 在我的视图控制器中创建一个方法:
informDelegateWithObject:
,它调用委托方法,并在延迟后调用该方法。即[self performSelector:@selector(informDelegateWithObject:) withObject:.. afterDelay:..]
。然而,这可以工作,因为我的视图控制器正在被解雇,如果延迟几秒钟,那么它会从内存中释放,并不会导致崩溃,当涉及到调用? - 创建一个
NSInvocation
的实例。我曾经想过,但是,这个对象的寿命是多少?如果我使用[NSInvocation invocationWithMethodSignature:]
创建它,那么NSInvocation
对象不会被自动发布,并且不会在下一个运行循环中出现?别说几秒钟了。当我的模式视图控制器被解散和释放时,我无法将调用对象存储在我的视图控制器中。
有什么建议吗?
感谢您的回复。实际上我有一个不同的模式,它是一个相当复杂的应用程序,我的EVC(编辑视图控制器)从多个地方调用,因此可以有多个代表。上下文和保存都完全由EVC处理。我真的只是想知道在延迟之后调用方法的最佳方法,并且问题中描述的对象生存期问题。有任何想法吗? – 2009-12-04 10:57:05
你仍然可以使用我的模式。 在myViewController:didFinishSaving:实现中,您可以调用myViewController上的方法...像[myViewController saveAndMergeWithMOC:self.managedObjectContext],然后关闭。 说到延迟调用选择器... 我看到没有错误使用performSelector:withObject:afterDelay :.如果你想压制编译器的警告,你可以定义一个包含该方法的协议。 在任何情况下,它必须工作,因为UIViewController继承自NSObject,并且@selector(performSelector:withObject:afterDelay :)将被Objective-C运行时找到 – muccy 2009-12-04 11:48:02