2012-02-28 69 views
2

我想知道如果iOS允许一个人做到以下几点:如何延迟保存数据?

我有一个益智游戏,我一直在努力保存数据,当用户返回到主屏幕。要做到这一点,使用NSNotificationCenter,我有一个我的游戏类,以观察[UIApplication sharedApplication]ApplicationWillResignActive方法,所以当这种情况发生时,我保存我的游戏状态。但是,如果用户决定退出而动画正在进行,游戏将保存一个midState,其中模型值仍然在变化,这往往会导致崩溃。我的问题是,如果有可能以某种方式延迟保存过程(即使它在后台)直到动画完成(或某个变量等于1)?

我的第一个想法是创建预定事件与NSTimer试图保存,直到一切都设置。任何想法,将不胜感激。谢谢

回答

1

而不是试图拖延减排,特别是在ApplicationWillResignActive,你应该考虑如何停止动画并记录动画的预期最终值。根据动画的方法(UIView静态方法,基于块,第三方),通常有一种方法可以阻止它们,并且由于您定义了动画,您应该已经知道最终状态。

在基于块的动画的情况下: How to cancel UIViews block-based animation?

+0

不幸的是我的动画使用了大量的完成处理这样一些方法不叫,直到一些动画完成的。但我当然可以编写一个自定义方法来计算背景中的所有内容,我只是想知道是否有其他方法。感谢您的回复。 – 2012-02-28 20:28:25

+0

@Kaan欢迎您。我知道苹果公司在'ApplicationWillResignActive'方面的指导方针非常严格,要花很长时间(他们会在特定的时间,也许10秒后杀死你的应用程序)。如果您尝试延迟保存操作而不阻止应用程序在保存发生之前退出的线程,那么也有很好的机会。 – Joe 2012-02-28 20:31:34

+0

那么我想我只需要编写一个自定义的方法来计算没有动画的每个值并将其存储在某个地方,它会变得很难看,但它会起作用,我希望我已经使用了更多的NSTimer事件来处理动画处理程序而不是完成块。 (叹...):) – 2012-02-28 20:41:44

2

您可以使用performSelector:withObject:afterDelay

// Call doSomething after a 1 second delay 
[self performSelector:@selector(doSomething) withObject:nil afterDelay:1.0f];