iPhone UITableView正在从ConnectiondFinishLoading填充

iPhone UITableView正在从ConnectiondFinishLoading填充,iphone,objective-c,json,uitableview,nsurlconnection,Iphone,Objective C,Json,Uitableview,Nsurlconnection,我花了好几个小时想弄明白这一点。我有一些来自NSURLConnection的JSON。这工作正常,我已经将其解析为一个数组。但我似乎无法从ConnectiondFinishLoading方法中取出数组。我在UITableViewCell方法中获得(null)。我假设这是一个保留问题的范围,但我对ObjC太陌生了,不知道该怎么办。任何帮助都将不胜感激。 干杯 -(void)连接dFinishLoading:(NSURLConnection*)连接{ [连接释放]; NSString*respon

我花了好几个小时想弄明白这一点。我有一些来自NSURLConnection的JSON。这工作正常,我已经将其解析为一个数组。但我似乎无法从ConnectiondFinishLoading方法中取出数组。我在UITableViewCell方法中获得(null)。我假设这是一个保留问题的范围,但我对ObjC太陌生了,不知道该怎么办。任何帮助都将不胜感激。
干杯

-(void)连接dFinishLoading:(NSURLConnection*)连接{
[连接释放];
NSString*responseString=[[NSString alloc]initWithData:responseData编码:NSUTF8StringEncoding];
[回应数据发布];
SBJSON*json=[[SBJSON alloc]init];
NSDictionary*results=[json objectWithString:responseString];
self.dataArray=[results objectForKey:@“data”];
NSMutableArray*tableArray=[[NSMutableArray alloc]initWithObjects:nil];
for(数据数组中的NSString*元素){
//NSLog(@“%@,[element objectForKey:@“name]”);
NSString*tmpString=[[NSString alloc]initWithString:[element objectForKey:@“name”];
[tableArray addObject:tmpString];
}
}
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{
静态NSString*CellIdentifier=@“Cell”;
UITableViewCell*单元格=[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
如果(单元格==nil){
cell=[[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault重用标识符:CellIdentifier]自动释放];
}
//配置单元格。
//cell.textlab.text=[self.tableView objectAtIndex:indexath.row];
cell.textlab.text=[self.tableArray objectAtIndex:indexath.row];
NSLog(@“%@”,表格数组);
返回单元;
}
  • 摆脱第二行中的
    [连接释放]
    连接
    对象是自动删除的,因此这可能会导致崩溃
  • 看起来您有一个名为
    tableArray
    的属性?如果是这样,您将重新声明此方法中的名称(您应该得到编译器警告) 仔细想想,下面是该方法的第二个1/2部分的外观:

    NSMutableArray *tmpArray = [[NSMutableArray alloc] initWithObjects:nil];
    
    for (NSString *element in dataArray) {
        [tmpArray addObject:[element objectForKey:@"name"]];
    }
    
    self.tableArray = tmpArray;
    [tmpArray release];
    

    connectiondFinishLoading:
    中,您使用declare
    tableArray
    作为局部变量。因此,它将永远不会分配给
    self.tableArray

    解决方案:

    在接受了kubi和st3fan关于
    self.tableArray
    的建议后,我发现我必须用
    [self.tableView reloadData]重新加载tableView

    我遇到了同样的问题,我通过重新加载表解决了这个问题

    我在ConnectionIDFinishLoading函数的末尾插入了这一行

    [self.tableView reloadData];    
    

    而且很有效。

    kubi。我尝试了这种方法,但在UITableVIewCell方法中仍然得到null?但是我在ConnectiondFinishLoading中得到了正确的值。它仍然卡在那里。。。谢谢你的帮助。我注意到了:2010-02-06 13:38:07.907球场[34368:207](空)2010-02-06 13:38:07.908球场[34368:207](空)2010-02-06 13:38:07.910球场[34368:207](空)2010-02-06 13:38:07.952球场[34368:207](“我的高尔夫球场”、“格伦安妮”、“艾莉莎牧场”、“圣巴巴拉高尔夫俱乐部”,“Rancho San Marcos”)UITableViewCell似乎在ConnectionIDFinishLoading之前加载。因此,值还不存在……很高兴一切顺利!附言。您应该将我们的一个答案标记为正确。