2011-07-07 176 views
1

我想從服務器加載JSON,然後在UITableView中顯示它。請求很好,但是當我嘗試將數據添加到tableview時,應用程序崩潰時,我打電話[tableView reloadData]方法被調用。我在UITableView方法中有變量jsonArray引用,以便TableView顯示該變量的內容。這是做這件事的最好方式,我做錯了什麼?在iPhone上UITableView異步加載JSON

連接

NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

主HTTP回調

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    [connection release]; 

    NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
    [responseData release]; 

    //Declare the parser 
    SBJsonParser *parser = [[SBJsonParser alloc] init]; 

    jsonArray = [parser objectWithString:responseString]; 

    [tableView reloadData]; 

    [parser release]; 
    [responseString release]; 
} 

錯誤

2011-07-07 14:42:56.923 Viiad[16370:207] -[__NSSet0 objectAtIndex:]: unrecognized selector sent to instance 0x5a4a0b0 
2011-07-07 14:42:56.925 Viiad[16370:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSSet0 objectAtIndex:]: unrecognized selector sent to instance 0x5a4a0b0' 

EDIT

UITableViewMethods

// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    NSArray *results = [[jsonArray valueForKey:@"Rows"] valueForKey:@"name"]; 

    cell.textLabel.text = (NSString *)[results objectAtIndex:indexPath.row]; 
    return cell; 
} 
+0

jsonArray不是NSArray的機會很好。該應用在tableView:cellForRowAtIndexPath:方法中失敗。你可以發佈嗎? – ageektrapped

+0

好吧,我剛剛添加它。謝謝! –

回答

2

此消息

-[__NSSet0 objectAtIndex:]: unrecognized selector sent to instance 0x5a4a0b0 

意味着在代碼某處時,objectAtIndex:消息被髮送到的__NSSet0一個實例。對我來說,看起來你正在傳遞一個NSSet,你期望NSArray

在調用[results objectAtIndex:indexPath.row]之前設置調試器斷點並查看results實際包含的內容。我的猜測是JSON解析器沒有返回你認爲的結果。 Objective-C是動態類型的:僅僅因爲你說變量是NSArray類型並不意味着它不能包含其他對象。如果函數返回類型id,編譯器根本沒有任何類型信息。