2013-04-07 50 views
0

我有一個列表視圖控制器,它有一個從Yelp獲取其數據的表。我有一個名爲「YelpObject.h/m」的單獨的類,它完成了從Yelp API收集Yelp數據的所有工作。我也使YelpObject成爲一個單身人士。我在ListViewController的init方法中初始化單例。使用URL中的動態數據更新UITableView

-(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]; 
} 

的名字是一個的NSMutableArray其中有來自Yelp的API排名前20位的酒店名稱。當我嘗試從「YelpObject.m」中打印名稱的內容時,它具有所需的數據。

但是,這裏的問題是,當「makeConnectionsToYelp」函數獲取其數據時,將調用上述方法&所有表數據源方法。這使該表始終顯示零行。

我不知道怎麼只有

[[YelpObject sharedYelpObject] makeConnectionsToYelp]; 

回報的方法調用之後確保表數據源的方法被調用。

我不知道回調方法是否可以在這裏幫助。我是iOS編程的新手,任何幫助都非常感謝。

回答

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; 

}

+0

我想這和我仍然有零計數問題:( – user1646683 2013-04-07 04:26:15

+0

請發表你在哪裏得到零計數代碼不管我做了會首先獲取數據,然後再重新加載你的tableView。 – satheeshwaran 2013-04-07 08:55:31