2012-08-07 80 views
0

我是iOS开发和Objective-C编程的新手,所以原谅我的“不高兴”。tableView不填充数组中的数据

这是事情,我有一个函数,它构建一个从JSON对象获取数据的数组。 然后我有第二个函数,负责填充我的数组中包含的数据的tableView。

问题是,即使该数组已添加到我的头文件并在主文件中实现,但该数组的内容似乎无法从我的tableView函数中访问。 该tableView保持空...

你知道这是为什么吗?

以下是函数,谢谢你的帮助!

1)数组建筑功能:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
[self.responseData appendData:data]; 

    //Get data 
    NSError *myError = nil; 
    NSDictionary *res = [NSJSONSerialization JSONObjectWithData:self.responseData options:NSJSONReadingMutableLeaves error:&myError]; 

    //Extract titles 
    NSMutableArray *myResults = [[NSMutableArray alloc] init]; 
    NSArray *results = [res objectForKey:@"data"]; 

    for (NSDictionary *result in results) { 
     NSString *title = [result objectForKey:@"colors"]; 
     NSLog(@"colors: %@", colors); 
     [myResults addObject:colors]; 
    } 

    self.colorNames = myResults;  
} 

2)的TableView灌装功能:

// 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:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
} 

//Set cell text 
NSString *colorString = [self.colorNames objectAtIndex: [indexPath row]]; 
NSLog(@"%@",colorString); 
cell.textLabel.text = colorString; 

    return cell; 
} 
+0

控制器是一个TableViewController还是一个带有TableView的ViewController? – 8vius 2012-08-07 20:39:12

回答

0

你确定你收到您的JSON数据后刷新你的表视图的数据?我会在connection:didReceiveData:方法的末尾建议[self.tableView reloadData];。否则,方法tableView:cellForRowAtIndexPath:将在您查看加载后仅调用一次。

干杯, 安卡

+0

感谢您的回答!我没有确实重装。这可能是愚蠢的,但[self.tableView reloadData];抛出一个错误,因为“在myViewController类型的对象上找不到tableView”。我该如何解决这个问题?再次感谢! – sf89 2012-08-07 20:45:38

+0

好吧,我以为你使用的是UITableViewController的子类?如果您使用的是简单的UIViewController,则必须在主视图中保留对您的表视图的引用/出口。然后在这个表视图的实例上调用'reloadData'方法。 – anka 2012-08-07 20:47:53

+0

我没有tableView的插座,加了一个,并按照你的建议放置了重新加载的线,像魅力一样工作,你正式成为我的英雄。太感谢了! – sf89 2012-08-07 20:55:02

0

我猜你必须实现更多的东西的UITableViewDataSource协议。 您必须至少提供一种方法tableView:numberOfRowsInSection:返回表格所具有的实际行数,然后tableView:cellForRowAtIndexPath:被调用以使用您的数据填充表格。

布鲁诺

+0

感谢布鲁诺,上面提出的解决方案实际上工作正常,我已经有一个方法获得实际的行数。 – sf89 2012-08-07 21:10:45

0

是排indexPath的方法?我认为它应该是indexPath.row而不是[indexPath row]

+0

您可以在Objective C中同时调用方法或访问属性。 – sf89 2013-08-01 01:40:01