2013-07-08 29 views
-1

我希望爲返回JSON數據的URL數組提取數據。我想下面的代碼:iOS中的多個JSON請求

for (int i =0; i<numberOfDays; i++) 
{ 
    NSData *data = [NSData dataWithContentsOfURL:[wordURLs objectAtIndex:i]]; 
    NSLog(@"%@",[wordURLs objectAtIndex: i]); 
    [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES]; 
} 

「wordURLs」是URL的數組,並在我的「fetchedData:」方法,我返回的JSON數據保存到一個plist文件。

問題是,對於循環運行的所有次數,數據僅返回一個/兩個特定的URL(即對於位於1和3的索引處的URL,或者1和2等)。我登錄並查看每次「數據」變量初始化時,URL都是不同的。

這樣做的更好方法是什麼?

我已經使用NSJSONSerialization來解析JSON。

回答

2

有很多更好的方法來做到這一點。你試圖做什麼的問題是它是同步的,這意味着你的應用程序必須等待這個動作完成才能做其他事情。我絕對會建議通過簡單地使用NSURLConnectionNSURLRequests,併爲它們設置代表來進行調查。

它們的設置和管理相對簡單,並且會使您的應用運行一百萬次更順暢。

我會發布一些示例代碼,稍後再做一次,一旦我回家。

UPDATE

首先,你的類正在調用這些連接將需要在接口文件的連接的委託,所以這樣的事情。

ViewController.h

@interface ViewController: UIViewController <NSURLConnectionDelegate, NSURLConnectionDataDelegate> { 
    NSMutableData *pageData; 
    NSURLConnection *pageConnection; 
} 

然後你需要在你創建/初始化必需的變量執行

ViewController.m

-(void) viewDidLoad { 
     pageData = [[NSMutableData alloc] init]; 
     NSURLRequest *pageRequest= [[NSURLRequest alloc] initWithURL:pageURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:4]; 
     pageConnection = [[NSURLConnection alloc] initWithRequest:pageRequestdelegate:self]; 
} 

那麼你還需要在數據被ret時將被調用的委託函數rieved。

-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    if (connection == pageConnection) { 
     [pageData appendData:data]; 
    } 
} 

-(void) connectionDidFinishLoading:(NSURLConnection *)connection { 
    if (connection == pageConnection) { 
     // Do whatever you need to do with the data 
    } 
} 

-(void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 

    if (connection == pageConnection) { 
     // Do something since the connection failed 
    } 
} 

當然這個例子只包括一個URL被加載,但你可以使它多達你想要的。您當然必須跟蹤所有必要的NSURLConnections,以便您知道將接收到的數據放在哪裏,以及在發生故障或成功完成連接時應採取的措施,但這並不困難從我所給的擴展。

如果您看到任何明顯的錯誤或某些不起作用,請讓我知道。

+0

謝謝,這對我有用! – mvb