2014-06-26 101 views
2

我在iOS應用程序中使用Restful web服務NSURLConnection,當我調用web服務時,並且在調用web服務後按主頁按鈕,然後應用程序進入後臺並且它沒有在後臺獲得響應。即使應用程序處於後臺狀態,我的應用程序響應也會得到響應。如何在應用程序處於後臺時在iOS應用程序中獲取Web服務響應?

所以請建議我任何合適的答案。我應該使用NSURLSession嗎?

+0

是的。它的設計正是爲了這一點。 – KPM

+0

@KPM請告訴我該怎麼做 –

+0

請參閱下面的答案:http://stackoverflow.com/a/24428534/364446 – KPM

回答

-1

使用UIBackgroundTaskIdentifier,像這樣

  • (無效)applicationDidEnterBackground:(UIApplication的*)應用程序{

    //啓動後臺服務,並將獲得的數據每隔10秒 [自runBackgroundTask:10] ; }

  • (無效)runBackgroundTask:(INT)時間{

    的UIApplication *應用; app = [UIApplication sharedApplication]; //檢查,如果應用程序在後臺模式 如果([UIApplication的sharedApplication] .applicationState == UIApplicationStateBackground){

    //create UIBackgroundTaskIdentifier and create tackground task, which starts after time 
    __block UIBackgroundTaskIdentifier bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
        [app endBackgroundTask:bgTask]; 
        bgTask = UIBackgroundTaskInvalid; 
    }]; 
    
    dispatch_async(dispatch_get_main_queue(), ^{ 
        NSTimer *refreshTimer = [NSTimer scheduledTimerWithTimeInterval:time target:self selector:@selector(doRefresh) userInfo:nil repeats:YES]; 
        [[NSRunLoop currentRunLoop] addTimer:refreshTimer forMode:NSDefaultRunLoopMode]; 
    
        [app endBackgroundTask:bgTask]; 
        bgTask = UIBackgroundTaskInvalid; 
    }); 
    

    }}

doRefresh - 這是方法,其中你給你Web服務

+1

這不是正確的方法。相反,使用'NSURLSession'就是爲了這個。 – KPM

+0

@KPM是的,我們可以使用NSURLSession,但我認爲NSURLSession僅用於iOS 7,是不是? –

+0

您沒有指定任何關於需要iOS 7之前兼容性的內容。 – KPM

0
NSURL *myURL = [NSURL URLWithString:@""]; // set your url here 
NSURLSession *session = [NSURLSession sharedSession]; 
NSURLSessionDownloadTask *getTask = [session downloadTaskWithURL:myURL completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) { 
    // do stuff with the result 
}]; 

// don't forget to start your task 
[getTask resume]; 

以下是你可能要考慮一個很好的教程: http://www.raywenderlich.com/51127/nsurlsession-tutorial

相關問題