在加载UITableView之前等待FB请求

时间:2014-07-26 03:38:08

标签: ios objective-c facebook uitableview

我正在尝试使用Facebook的iOS SDK并在UITableView中加载朋友列表。当我在viewDidLoad中放入以下代码时,它似乎没有被添加到UITableView中。 (用户是NSMutableArray)

FBRequest* friendsRequest = [FBRequest requestForMyFriends];
[friendsRequest startWithCompletionHandler: ^(FBRequestConnection *connection,
                                              NSDictionary* result,
                                              NSError *error) {
    NSArray* friends = [result objectForKey:@"data"];
    NSLog(@"Found: %i friends", friends.count);
    for (NSDictionary<FBGraphUser>* friend in friends) {
        NSLog(@"I have a friend named %@ with id %@", friend.name, friend.id);
        [users addObject:friend.name];
    }
}];

我尝试添加:

[friendsTableView beginUpdates];
[friendsTableView insertRowsAtIndexPaths:users withRowAnimation:UITableViewRowAnimationRight];
[friendsTableView endUpdates];

在请求完成后更新UITableView而不做任何更改。

我可以做什么在请求后加载UITableView或在请求完成时更新UITableView?

1 个答案:

答案 0 :(得分:0)

你不能只将任何数组传递给insertRowsAtIndexPaths:withRowAnimation:。它期望一个数组填充索引路径 - 因此名称。

你想要的是在收到回复后重新加载tableview。

FBRequest* friendsRequest = [FBRequest requestForMyFriends];
[friendsRequest startWithCompletionHandler: ^(FBRequestConnection *connection,
                                              NSDictionary* result,
                                              NSError *error) {
    NSArray* friends = [result objectForKey:@"data"];
    NSLog(@"Found: %i friends", friends.count);
    for (NSDictionary<FBGraphUser>* friend in friends) {
        NSLog(@"I have a friend named %@ with id %@", friend.name, friend.id);
        [users addObject:friend.name];
    }
    [friendsTableView reloadData]; //<------
}];

while tableviews datasource&amp;委托方法使用users作为来源。