這裏的東西,你應該考慮(從this StackOverflow question拍攝):
AFHTTPRequestOperationManager
使用舊NSURLConnection
使 不利於後臺下載。
AFURLSessionManager
使用NSURLSession
引擎蓋下,這樣做
話雖這麼說,如果由於某種原因,你堅持使用AFHTTPRequestOperationManager
繼續閱讀。
如果您試圖在applicationDidEnterBackground:
或類似的代碼中運行此代碼,那麼爲什麼您在控制檯中沒有看到任何內容是可以理解的。當應用程序進入後臺時,可以隨時通過操作系統將其置於暫停狀態,這可能是您的情況正在發生的情況(請閱讀有關App States的更多信息)。如果您需要更多的時間來運行代碼,那麼你必須明確地要求它通過調用:
__block UIBackgroundTaskIdentifier backgroundTaskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{}
這應該只是你想在後臺運行的代碼之前。
一旦您的應用程序耗盡時間並且將被暫停,就會調用到期處理程序。
[application endBackgroundTask:backgroundTaskIdentifier]
總而言之你的代碼應該是這個樣子:
它完成了不管你在做(在你的情況下,你應該取消GET請求,如果它尚未完成),並調用是非常重要的
- (void)applicationDidEnterBackground:(UIApplication *)application
{
__block AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
__block UIBackgroundTaskIdentifier backgroundTaskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[manager.operationQueue cancelAllOperations];
[[UIApplication sharedApplication] endBackgroundTask:backgroundTaskIdentifier];
}];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
[manager GET:@"SOMEURLHIDDEN" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@",error);
}];
}
來源
2014-05-20 06:11:00
Gad
也許它沒有被調用?獲得NSLog之前。也許你用空字符串成功完成了?添加一些格式:NSLog(@「response =%@」,responseObject); – danh