2015-02-05 209 views
0

可以在這裏使用一點幫助,因爲我對塊和完成處理程序的理解非常有限。iOS:UIBackgroundFetchResult塊內完成處理程序

我試圖實現後臺獲取iOS中,同時與本教程以下,並根據需要改變的東西出來:http://www.appcoda.com/ios7-background-fetch-programming/

我已經實施了必要的前體獲得背景取指令啓用並已實現了以下方法在我的viewController和已驗證它是模擬後臺抓取時被解僱:

- (void)retrieveMessagesInBackgroundWithHandler:(void (^)(UIBackgroundFetchResult))completionHandler

在我的方法,我打電話一類SoapRequest到了執行異步調用Web服務的nd完成處理程序,我能夠確定我是否有新的數據。最後,我想回送UIBackgroundFetchResult值:

SoapRequest *sr = [SoapRequest createWithURL:[NSURL URLWithString:kServiceURL] soapAction:soapAction postData:soapEnvelope deserializeTo:[NSMutableArray array] completionBlock:^(BOOL succeeded, id output, SoapFault *fault, NSError *error) { 

    if(!succeeded) { 
     NSLog(@"method failed: %@", methodName); 
     completionHandler = (UIBackgroundFetchResultFailed); 
    } else { 
     //NSLog(@">>>>>> OUTPUT: %@", output); 
     NSDictionary *responseDictionary = output; 
     id response = responseDictionary[@"RetrieveMessagesResponse"][@"RetrieveMessagesResult"][@"a:MessagesResult"][@"b:MessageLabel"]; 
     if ([response isKindOfClass:[NSArray class]]) { 
      NSArray *array = response; 
      completionHandler = (UIBackgroundFetchResultNewData); 
     } else { 
      NSLog(@"Nothing new"); 
      completionHandler = (UIBackgroundFetchResultNoData); 
     } 
    } 
}]; 

我的問題,你可以想像,就是我正在嘗試設置completionHandler塊內。我得到的錯誤: 變量不可分配(缺少__block類型說明符)

我真的不確定如何正確實現這一點,並希望得到一些見解。任何幫助將不勝感激。

在此先感謝!

回答

1

你不應該分配完成塊的,你應該執行它,並傳遞一個參數:

completionHandler(UIBackgroundFetchResultNoData); 

注意,爲了安全起見,你也應該檢查是否completionHandler是零,因爲它會崩潰,如果它是。

+0

非常感謝您發現我的疏忽! – 2015-02-05 23:27:50