2012-02-29 31 views
0

我有一個具有許多視圖的應用程序(使用標籤欄控制器)。我想創建併發的異步http請求,與用戶正在查看的當前視圖無關。當一個http請求被響應時,我想更新用戶界面,然後再次請求。如果我在UIViewController子類中編寫代碼,一切正常。在哪裏可以編寫我的代碼以便工作,而不必知道用戶正在查看哪個標籤?我想避免使用線程。那可能嗎?背景中的多個異步HTTP請求iPhone

我做了一個web服務,它接受http請求並在它有新的東西時作出響應。所以,然後我要求提供新的信息,然後我重新打開Web服務的窗口與我交談。這樣我就可以建立一個「永久」連接。

最後,我想知道,什麼是最好的方式告知我的模型將作出的變化。 NSNotification?代表團?

UPDATE

下面的代碼不接收任何響應。它收到BAD_ACCESS並且崩潰。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 
    // Request Data 
    ConnectionHandler *connectionHandler = [[ConnectionHandler alloc] init]; 
    [connectionHandler requestSO]; 
    [connectionHandler requestSopen]; 
    // Make Root View Controller 
    MainViewController *mainViewcontroller = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil]; 
    [self.window setRootViewController:mainViewcontroller]; 
    // 
    self.window.backgroundColor = [UIColor whiteColor]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

回答

0

避免線程是錯誤的,但如果你想從一箇中心的地方運行所有的進程,也許appDelegate是一個你可以做到的地方。就我個人而言,我會做模型內的所有網絡請求。

+0

上看到Apple的示例XMLPerformance爲什麼要避免線程出錯? – 2012-02-29 12:36:11

+2

在單獨的後臺線程(在主線程之外)運行您的請求會使您的應用程序用戶界面響應。如果你的UI由於在主線程中運行了所有進程而非常不響應,那麼你的應用可能會被OS所殺,並且至少你的用戶會對它進行評估/評估。請參閱http://www.raywenderlich.com/4295/multithreading-and-grand-central-dispatch-on-ios-for-beginners-tutorial – ader 2012-02-29 13:13:36

2

NSURLConnection的默認情況下異步除非你手動調用sendSynchronousRequest:returningResponse:錯誤:,做一個NSURLConnectionDelegate類,設置類作爲模型的委託,並用它來更新你的UI。

+0

我應該在哪裏啓動http請求?我需要這些代碼一直執行。我現在不會看到用戶將查看哪個屏幕 – 2012-02-29 09:46:53

+1

使用後臺線程...這樣,無論在主線程上執行什麼,您都可以繼續發送請求。 – Prathiba 2012-02-29 09:48:33

+0

我想避免線程。有沒有更安全的方法來做到這一點? – 2012-02-29 09:50:14