api调用成功后未调用cellForRowAtIndexPath

时间:2014-04-30 20:34:14

标签: ios objective-c uitableview uiviewcontroller

在我的应用程序(使用故事板FYI)中,我有一个包含tableView的viewController。我的viewController命中一个API并返回我的tableView应该填充的项目数组。问题是,在成功检索数组后,reloadData方法不会触发对cellForRowAtIndexPath的调用。我已正确设置委托和数据源,但仍然没有运气。这是我的代码:

在我的viewDidLoad中:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView = [[UITableView alloc]init];
    self.tableView.dataSource = self;
    self.tableView.delegate = self;

    [[CCHTTPClient sharedClient] getItemsWithSuccess:^(NSArray *items) {

        self.items = items;
        [self.tableView reloadData];

    } failure:^(NSError *error) {
    }];
}

以及我的numberOfRowsInSection:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.items count];
}

我还发现,如果我在前一个VC上进行API调用并在推送viewController之前设置viewController项的数组,则该表将正确填充。真的不确定这里发生了什么。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

我怀疑这是由于从辅助线程调用reloadData引起的。试试这个:

[[AGHTTPClient sharedClient] getItemsWithSuccess:^(NSArray *items) {
    self.items = items;

    dispatch_async(dispatch_get_main_queue(), ^{
        [self.tableView reloadData];
    });
} failure:nil];

答案 1 :(得分:1)

如果你的控制器和表格视图是在故事板中制作的,那么

self.tableView应该是一个插座。你在viewDidLoad中用alloc init创建了一个不同的表视图,所以你在那个上调用reloadData,而不是你在屏幕上调用的那个。删除该alloc init行,并连接IB中的插座。