Objective c 填充UITableView
我正在努力与我以前工作过的UITableView抗争,但不知何故我打破了它! 它是Paul Hegarty课程中单元的一部分 症状是视图已加载但为空。我显然误解了一些相当基本的东西 据我所知,这两个关键方法是1节行计数,在我的例子中,它返回零,我知道这是错误的Objective c 填充UITableView,objective-c,uitableview,xcode4.5,Objective C,Uitableview,Xcode4.5,我正在努力与我以前工作过的UITableView抗争,但不知何故我打破了它! 它是Paul Hegarty课程中单元的一部分 症状是视图已加载但为空。我显然误解了一些相当基本的东西 据我所知,这两个关键方法是1节行计数,在我的例子中,它返回零,我知道这是错误的 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // #warning Incomple
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// #warning Incomplete method implementation.
// Return the number of rows in the section.
NSLog(@"TopPlaces %@",self.topPlaces);
//return 100;
return [self.topPlaces count];
}
由于上述原因,由于没有行,因此永远不会调用以下方法
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
第二个是在ViewDidLoad中,我可以将数据记录到控制台,一切都正常。i、 e.我的数据是在ViewDidLoad中生成的
- (void)viewDidLoad
{
[super viewDidLoad];
dispatch_queue_t dowloadQueue = dispatch_queue_create("flick downloader", NULL);
dispatch_async(dowloadQueue, ^{
NSArray *topPlaces = [FlickrFetcher topPlaces];
//NSLog(@"Array is %@",topPlaces); // array is OK here
dispatch_async(dispatch_get_main_queue(), ^{
NSSortDescriptor *woeDescriptor = [[NSSortDescriptor alloc] initWithKey:@"_content" ascending:YES];
NSArray *woeDescriptors = @[woeDescriptor];
NSArray *sortedReturns = [topPlaces sortedArrayUsingDescriptors:woeDescriptors];
self.topPlaces = sortedReturns;
//all the data is present here, count is 100 and array will log to console
NSLog(@"count here is %u",[self.topPlaces count]);
});
});
// Uncomment the following line to preserve selection between presentations.
self.clearsSelectionOnViewWillAppear = NO;
}
什么是self.topPlaces?尝试记录阵列并查看是否有任何内容。如果没有,请确保它已设置
如果您提供更多信息,我将能够写出更具体的答案。什么是self.topPlaces?尝试记录阵列并查看是否有任何内容。如果没有,请确保它已设置
如果您提供更多信息,我可以写一个更具体的答案。问题是您进行了一个异步调用来获取数据(这意味着您的数组在将来的某个时候应该充满了数据),但之后您不会重新加载tableview。调用
reloadData
将实现以下功能:
...
self.topPlaces = sortedReturns;
//all the data is present here, count is 100 and array will log to console
NSLog(@"count here is %u",[self.topPlaces count]);
[self.tableView reloadData]; // Assuming that 'tableView' is your outlet
这将指示tableview再次查询其数据源,并最终加载(现在为非空)topPlaces
数组中的所有数据。
进一步解释: 我在@nerak99的评论中看到,他不完全确定为什么问题会通过
重新加载数据来解决。
好吧,让我们举个例子:
假设你有一家餐馆
你在早上6点开门,你会发现你没有什么可煮的。因此,您要求您的一名员工前往市场购买供应品(这是您的异步呼叫)
同时你指示一位女服务员写今天的菜单,所以她写。。。嗯,没有什么(这是您的表视图要求的行数)
现在7点,那个去市场的家伙带着10件东西回来了。更新菜单的下一个逻辑步骤是什么?实际通知女服务员(这是您的重新加载的数据
)您退回的物品
我希望这是有意义的:)问题是您进行了一个异步调用来获取数据(这意味着您的数组在将来的某个时候应该充满数据),但之后您不会重新加载tableview。调用reloadData
将实现以下功能:
...
self.topPlaces = sortedReturns;
//all the data is present here, count is 100 and array will log to console
NSLog(@"count here is %u",[self.topPlaces count]);
[self.tableView reloadData]; // Assuming that 'tableView' is your outlet
这将指示tableview再次查询其数据源,并最终加载(现在为非空)topPlaces
数组中的所有数据。
进一步解释:
我在@nerak99的评论中看到,他不完全确定为什么问题会通过重新加载数据来解决。
好吧,让我们举个例子:
假设你有一家餐馆
你在早上6点开门,你会发现你没有什么可煮的。因此,您要求您的一名员工前往市场购买供应品(这是您的异步呼叫)
同时你指示一位女服务员写今天的菜单,所以她写。。。嗯,没有什么(这是您的表视图要求的行数)
现在7点,那个去市场的家伙带着10件东西回来了。更新菜单的下一个逻辑步骤是什么?实际通知女服务员(这是您的重新加载的数据
)您退回的物品
我希望这是有意义的:)是的,我可以很好地记录内容。从上面提供和接受的答案来看,我的理解是,因为我正在进行一个异步调用,所以tableview只是继续进行并加载,而该调用的结果不在数组中。“重新加载数据”解决了这个问题,我不完全确定原因,但现在可以开始了。@nerak99请参阅我的进一步解释。它会让你明白的。是的,我可以很好地记录内容。从上面提供和接受的答案来看,我的理解是,因为我正在进行一个异步调用,所以tableview只是继续进行并加载,而该调用的结果不在数组中。“重新加载数据”解决了这个问题,我不完全确定原因,但现在可以开始了。@nerak99请参阅我的进一步解释。这会让你明白的。我喜欢和餐馆的类比+1.喜欢与餐厅的类比+1.