2012-08-10 65 views
0

我在对象上执行异步方法,并且当我的请求完成时,我将结果打印到标签中。我的问题是:如果我启动我的请求,然后删除我的对象,我的setText方法崩溃(因为我的对象被释放)。请求traitement崩溃 - 发送到已释放实例的消息

即使我的对象已被释放,我该如何避免此崩溃?

是否有任何测试要做?

回答

1

1)不要删除你的对象,直到请求完成:)

2)取消请求(并不总是可能取决于你的对象)

+0

我无法取消它。我在GameKit中使用了loadScoresWithCompletionHandler。 – Pierre 2012-08-10 12:37:05

+0

+1为你的第一点,这完全回答了这个问题。如果你还没有完成某件事,你为什么要释放它? – JeremyP 2012-08-10 12:45:24

+0

那么我猜(1)是你唯一的选择 - 正如@JeremyP所说,你为什么要发布一些你还没完成的东西? – deanWombourne 2012-08-10 12:55:33

0

解决的办法是有一个NSMutableArray的对象创建在你“init”或你的“viewDidLoad”方法。当你想删除对象时,总是把它从它的超级视图中删除后放入这个数组中。然后在你的异步方法中(最好在主线程上运行以打印结果),最后一件事是[storageArray removeObject:object],以释放它。

0

如果您的对象被释放并且它当前是视图上的子视图,那么视图本身已被销毁,您无处可显示标签内容。为什么这取决于你的应用程序的设计,但通常你的代码可以检测到视图的移除,如果你知道它的消失,你应该将视图的任何引用设置为零。

如果标签尚未添加到视图中,那么您需要保留该标签,以便您可以在其上设置文本并在包含视图上调用addSubview。

此外,如果用户操作会导致视图被删除 - 显示微调器并阻止用户执行此操作,因为他们调用的请求正在进行中。

0

异步请求可以保留该对象,直到完成它为止。

相关问题