2011-07-15 24 views
0

我從quizlet.com獲取數據,並適用於簡單的代碼行:SBJson和NSData的

-(void) grabbQuizletWithUrl:(NSURL*)requstURL { 

    NSString *dataString = [NSString stringWithContentsOfURL:requestURL encoding:NSUTF8StringEncoding error:&error]; 

    NSDictionary *dict = [dataString JSONValue]; 
} 

但我需要使用NSURLConnection的啓動和停止活動的指標。我想

-(void) grabbQuizletWithUrl:(NSURL*)requstURL { 

    NSURLRequest *quizletRequest = [[NSURLRequest alloc] initWithURL:requestURL]; 
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:quizletRequest 
                  delegate:self]; 
    [connection release]; 
    [quizletRequest release]; 

} 

// and getting data in delegate method: 



- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 

    [self.activityIndicator stopAnimating]; 

    NSString *dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

    NSDictionary *dict = [dataString JSONValue]; 

} 

我收到此類郵件:

[2377:707] -JSONValue失敗。錯誤是:意外的輸入結束

[2377:707] -JSON值失敗。錯誤是:令牌非法啓動[。]

[2377:707] -JSON值失敗。錯誤是:令牌[d]的非法的開始

回答

3

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;,你應該只是追加收到數據以前存儲的,因爲你只有一隻是一個迴應的一部分,即:

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    // someNSMutableDataIVar is an ivar to store the data in 
    [someNSMutableDataIVar appendData:data]; 
} 

然後在另一個名爲- (void)connectionDidFinishLoading:(NSURLConnection *)connection;的委託方法中,您應該處理數據。

-(void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    // the connection finished loading all data, process... 
    [self.activityIndicator stopAnimating]; 
    NSString *dataString = [[NSString alloc] 
          initWithData:someNSMutableDataIVar 
           encoding:NSUTF8StringEncoding]; 
    NSDictionary *dict = [dataString JSONValue]; 
} 

在Apple的URL Loading System Programming Guide中詳細描述了異步URL加載系統。

希望這會有所幫助!

+0

錯誤的'appendData'抱歉。 – 2011-07-15 21:37:44

+0

謝謝,這就是我錯過的!現在它可以工作。我沒有知道蘋果的指南,只是看了一眼。 – Michael

+0

不客氣Michael – 2011-07-16 07:00:12