我很努力地找到一種方法來同步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