2011-06-06 33 views
4

我目前正在將使用ASIHTTPRequest和SBJson的項目遷移到RestKit。執行RestKit作爲NSOperartion

以前的實現是使用NSOperation來創建HTTP請求,解析JSON對象並對Core Data API進行必要的調用。

我已經重新此因素如下:

@implementation UpdateBeers 

#pragma mark - NSOperation 

- (void)main { 
    [[RKClient sharedClient] get:@"/beers" delegate:self]; 
} 

- (void)request:(RKRequest*)request didLoadResponse:(RKResponse*)response { 
    debug(@"didLoadResponse"); 
} 

- (void)request:(RKRequest *)request didFailLoadWithError:(NSError *)error { 
    debug(@"%@", error); 
} 

#pragma mark - Memory 

- (void) dealloc { 
    [super dealloc]; 
} 

@end 

下出現在日誌

發送GET請求URL http://localhost:9091/api/test英寸HTTP正文:

問題是服務器從來沒有收到請求。

添加下列行:

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.3]]; 

到主方法的末尾解決了這個問題。

我的問題是:

我應該執行RESKIT API調用作爲的NSOperation,如果沒有什麼我在後臺撥打電話的替代品?

在此先感謝。

回答

6

也許我並不完全瞭解這裏的整體問題...... RestKit在加載網絡資源方面所做的一切就是已經在後臺。幾乎所有東西都是異步的,因此在NSOperation中運行現有的異步RestKit方法是重複的並且是反生產的。這就是說,一旦RestKit告訴你它已經完成了下載你的數據(didLoadResponse),你可能想要在NSOperation中做任何後續的後處理,如果這部分計算密集且與UI無關。否則,不要試圖超越RestKit,就像在示例中那樣運行它,並且你非常適合使用異步優勢。

此外,如果您打算同時觸發多個請求,則可能需要查看使用RestKit的請求隊列。它仍然會異步下載所有內容,但它只會一次運行儘可能多的請求;當我的應用程序更新時,一次發送大約七個請求,但隊列將以串行方式運行,而不是並行,從而防止任何網絡帶寬問題

+0

請參閱:http://stackoverflow.com/questions/13885295/restkit-makes-ui-unresponsive – quantumpotato 2013-05-23 18:59:09

+0

從Restkit 0.20起,服務請求完成方法,如request:didLoadResponse :,請求:didLoadError:,objectLoader:didLoadObjects:和objectLoader:didLoadError:已被替換爲AFHTTPRequestOperation和RKObjectRequestOperation類上的完成塊。 – prodeveloper 2014-06-23 07:24:14