使用来自URL的动态数据更新UITableView

时间:2013-04-07 02:47:45

标签: ios objective-c uitableview

我有一个列表视图控制器,它有一个从Yelp获取数据的表。我有一个名为“YelpObject.h / m”的独立类,它完成了从Yelp API收集Yelp数据的所有工作。我也让YelpObject成为单身人士。我在ListViewController的init方法中初始化单例。

-(id)initWithPlace:(NSString*)city{
    self=[super init];
    if(self){
        [self setCityName:city];
        [[YelpObject sharedYelpObject] initializeYelpWithLocation:city term:@"Hotels"];
        [[YelpObject sharedYelpObject] makeConnectionsToYelp];
    }
    return self;
}

现在使用以下方法:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
     return [[[YelpObject sharedYelpObject] names] count];
}

names是一个NSMutableArray,其中包含来自Yelp API的前20个酒店名称。当我尝试从“YelpObject.m”中打印名称的内容时,它具有所需的数据。

但问题是,当“makeConnectionsToYelp”函数获取其数据时,上述方法&调用所有表数据源方法。这使得表始终显示零行。

我不知道如何确保仅在

的方法调用之后调用表数据源方法
[[YelpObject sharedYelpObject] makeConnectionsToYelp];

回报。

我不知道回调方法是否可以在这里提供帮助。我是iOS编程的新手,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

做这样的事情:

-(id)initWithPlace:(NSString*)city{
self=[super init];
if(self){
    [self setCityName:city];
    [[YelpObject sharedYelpObject] initializeYelpWithLocation:city term:@"Hotels"];
    dispatch_queue_t dispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
    dispatch_async(dispatchQueue, ^(void)
    {
     [[YelpObject sharedYelpObject] makeConnectionsToYelp];
     //NSLog data returned to check.
     //may be you can add a activity indicator to show loading.
    dispatch_sync(dispatch_get_main_queue(), ^{ 
    //reload your table view here.
    [tableview reloadData];
    //remove activity indicator if added.
    });
    }); 
return self;

}