2012-04-25 23 views
1

我已经触发一个Web服务得到一些数据,并在不同的线程解析后,结果存储到核心数据的的viewController ..如果对象被它的方法执行完毕

我有很多之前发布的数据所以解析将需要一些时间,我不知道如果在导航中弹出viewController将停止执行我的解析方法,如果它停止执行之间,那么我的核心数据库将损坏,所以它会停止执行我的解析方法,

在释放我的viewController对象之前执行或执行选择器

MyViewController *vc = [[MyViewController alloc] init]; 
[self.navigationController pushViewController:vc animated:YES]; 
[vc performSelectorInBackground:aSelector withObject:arg]; 
+0

您使用ARC吗?如果没有,“MyViewController”在哪里发布?它是自动释放的? – Romain 2012-04-25 13:41:37

+1

如果解析是在不同的线程中,则不应受到影响。如果在解析完成后有回调或通知返回到您的视图控制器,那可能是一个问题。如果数据损坏是一个严重的问题,您还应该考虑用户按主页按钮。 – 2012-04-25 13:46:52

+0

是的,我使用ARC, – 2012-04-27 05:50:48

回答

3

您可能会考虑将Web服务器交互移动到其他对象。该对象可以处理请求/响应并将结果存储到Core Data中。这个对象也可能是一个带有队列来处理请求的全局对象。如果没有,那么你需要在视图控制器dealloc期间处理取消请求。

您的视图控制器可以侦听对核心数据的更改并采取适当的措施。

+0

和连接thingy可以跟踪飞机上的请求计数,如果需要调节。 +1指出核心数据应该遵守更改,而不是通知或委托(yuck!)。 – danh 2012-04-25 14:32:42

+0

“听取核心数据的变化”是什么意思,据我所知,你听听contextdidsavigation并采取适当的行动,有没有其他方式? – 2012-04-27 15:27:54

+1

核心数据更改时收到通知。 [看看这个链接](http://stackoverflow.com/questions/2463950/iphone-coredata-how-can-i-track-observe-all-changes-within-a-subgraph) – bbarnhart 2012-04-27 17:38:25

相关问题