在Facebook的iPhone應用程序中,每次應用程序激活時都會刷新新聞訂閱源。我想做類似的事情,但我擔心競賽狀況。我的應用程序的一般引導如下:當應用程序變爲活動狀態時刷新視圖中的競爭條件
UIApplicationDelegate
- (void)applicationDidFinishLaunching:(UIApplication*)application
{
[window addSubview:[self.navigationController view];
[window makeKeyAndVisible];
}
- (void)applicationDidBecomeActive:(UIApplication*)application
{
[rootViewController refresh];
}
RootViewController的
#pragma mark custom
- (void)refresh
{
if (self.newsFeedModel == nil) {
self.newsFeedModel = [[NewsFeedModel alloc] initWithDelegate:self];
}
[self.newsFeedModel request];
}
#pragma mark UIViewController
- (void)viewDidLoad
{
// initialize the table
// add subviews and whatnot
}
#pragma mark NewsFeedDelegate
- (void)newsFeedSucceeded:(NSMutableArray*)feed
{
// reload table view with new feed data
}
灑NSLog
到處之後,我決定操作順序爲:
- 的applicationDidFinishLaunching
- applicationDidBecomeActive
- 刷新
- viewDidLoad中
- newsFeedSucceeded
注意如何根查看已經加載刷新之前被調用。當我們忙於查詢服務器時,根視圖會加載。當服務器響應時,根視圖將填充該提要。這在大多數情況下適用,因爲網絡操作需要很長時間。但是,如果網絡操作完成速度快於視圖可以加載,那麼我將嘗試在視圖加載之前構建新聞饋送。這會很糟糕。解決這種競爭狀況的最佳Cocoa Touch練習是什麼?我只是設置一堆標誌來確定我們所處的狀態,並根據狀態刷新新聞提要,但是我想知道是否在Cocoa Touch中內置了事件來處理這個問題。
應用** **將意味着EnterForeground該視圖* *會在屏幕上加載,但它不是* *目前在屏幕上。在表格視圖甚至放到屏幕上之前操作它是否安全? – JoJo 2011-05-02 23:14:53
從newsFeedSucceeded:調用[tableView reload]是很好的。 tableView會通過數據源和委託回調準備好數據。 – jaminguy 2011-05-03 04:44:38