2012-05-03 39 views
1

我想將一些數據發送到一個需要POST數據的Web服務。是否有任何允許POST消息異步可靠發送的iOS庫?

但是,如果互聯網連接下降,我需要排隊數據。即緩存並在下一個可用的機會發送它。

是否有任何iOS庫可以幫助解決這個問題?

目前我打算使用ASIFormDataRequest執行此操作,如果失敗,請使用NSUserDefaults存儲數據。然後,我想我需要通過完成該過程在後臺:

  • 尋找出一個連接使用的NSOperation是標誌了一個NSNotification
  • 連接NSUserDefaults的從
  • 讀取數據發送該數據
  • NSUserDefaults的從

刪除的數據似乎並不像一個巨大的工作量,但我是重新發明這裏的輪或這是前進的最好方法是什麼?

+0

不確定,但也許RestKit這樣做? https://github.com/RestKit/RestKit – Marco

回答

0

我通常最終會使用ASIFormDataRequest和使用NSThread分離一個新的線程,以及呼叫。然後我把它叫我自己代表/協議一旦完成:

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"some_url"]]; 
[request setUseKeychainPersistence:YES]; 
[request addRequestHeader:@"Content-Type" value:@"application/json"]; 
for (NSString *key in dictionary) { 
    [request setPostValue:[dictionary objectForKey:key] forKey:key]; 
} 
[request startSynchronous]; 
if([request responseStatusCode] == 200) 
{ 
    NSString *response = [NSString stringWithFormat:@"%@", [request responseString]]; 
    if ([self _isValidDelegateForSelector:@selector(requestSucceeded)]) { 
     [_delegate requestSucceeded]; 
    } 
    if ([self _isValidDelegateForSelector:@selector(itemAdded:)]) { 
     [_delegate itemAdded:[response JSONValue]]; 
    } 
} 
else { 
    if ([self _isValidDelegateForSelector:@selector(requestFailedWithError:)]) 
     NSLog(@"%@", [request debugDescription]); 
    [_delegate requestFailedWithError:[request error]]; 
} 

這是我自己的「API」對象全部完成包含了所有的網服務電話,並因此爲什麼我叫startSynchronous代替異步,因爲我在不同的線程處理這個問題。

相關問題