我很努力地找到一种方法来同步iPhone应用程序的操作。 我有三个主要的NSOperation。NSOperation同步问题
NSInvocationOperation *showSpinner = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(spinnerOn:) object:YES];
NSInvocationOperation *reloadDatasource = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(reloadDatasource) object:nil];
NSInvocationOperation *hideSpinner = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(spinnerOn:) object:NO];
// Add dependency
[reloadDatasource addDependency:showSpinner];
[hideSpinner addDependency:reloadDatasource];
[self.queue addOperation:showSpinner];
[self.queue addOperation:reloadDatasource];
[self.queue addOperation:hideSpinner];
我可以看到三个操作顺序正确启动。然而,正如你可以想象的那样,第一个操作创建一个UIView并将其附加在顶部,而最后一个应该删除它。
这种情况发生在图形上说操作在屏幕上立即发生。所以我可以看到表格已经加载,而微调屏幕上,或其他奇怪的不同步的东西。
我明白图形端的变化发生在主线程上。所以我问我该如何修改代码来完成它应该做的事情。这是:创建微调,加载数据,并删除微调?有没有一种常见的方法来分离图形操作和数据操作?例如创建两个不同的操作。
谢谢
微调控制器最终会被移除还是只是保持旋转? hideSpinner操作是否被调用? – twerdster 2010-10-16 13:18:30
从你的描述看来,你实际上需要同步操作......我看到这个错误吗?我的意思是,你可能想要保持reloadDatasource异步,以保持你的Ms和Cs不受你的V(因为它),但是GUI的东西就像直接的因果关系,是的? – fish2000 2010-10-16 14:21:48
是的,都应该同步发生,包括Views的管理。我只想显示带有消息的视图,如“等待我加载数据”,然后在后台启动reloadData中,一旦完成,我想要删除微调视图。 – Leonardo 2010-10-16 15:00:28