在iOS App中使用Facebook Graph Api获取新闻源

时间:2015-03-22 09:36:15

标签: ios objective-c facebook uitableview facebook-graph-api

我需要在UITableView中查看facebook新闻源。我向服务器发送异步请求,我已经获得了新闻源列表。问题是我没有为每个feed获取图像的大小,因此我必须向嵌套到先前异步请求的服务器发送另一个异步请求。这段代码非常低效,因为我必须重复加载我的UITableView(参见我的代码)。

我需要获取图像大小,以便设置UITableCell的高度和单元格内UIImageView的尺寸。

有什么想法解决我的问题吗?

在我的代码下面:

-(void)loadData{

    //self.tableView.rowHeight = UITableViewAutomaticDimension;

    screenRect = [[UIScreen mainScreen] bounds];
    screenWidth = screenRect.size.width;
    screenHeight = screenRect.size.height;

    self.imgDic=[[NSMutableDictionary alloc]init];
    self.desArr=[[NSMutableArray alloc]init];
    self.mexArr=[[NSMutableArray alloc]init];
    self.udidArr=[[NSMutableArray alloc]init];


    [FBRequestConnection startWithGraphPath:@"/guide/feed" completionHandler:^(FBRequestConnection *connection,id result,NSError *error){
        NSDictionary *data = [result objectForKey:@"data"];

        for(NSDictionary *dic in data) {

            if([dic objectForKey:@"description"]==nil){
                [self.desArr addObject:@""];
            }else{
                [self.desArr addObject:[dic objectForKey:@"description"]];
            }


            if([dic objectForKey:@"object_id"]==nil){
                [self.udidArr addObject:@""];
            }else{
                [self.udidArr addObject:[dic objectForKey:@"object_id"]];
                [FBRequestConnection startWithGraphPath:[NSString stringWithFormat:@"/%@",[dic objectForKey:@"object_id"]] completionHandler:^(FBRequestConnection *connection,id result,NSError *error) {
                    [self.imgDic setObject:[result objectForKey:@"images"] forKey:[result objectForKey:@"id"]];
                    //NSLog(@"%@",[result objectForKey:@"id"]);
                    //NSLog(@"%@",[result objectForKey:@"images"]);
                    [self.tableView reloadData];
                 }];
            }

            if([dic objectForKey:@"message"]==nil){
              [self.mexArr addObject:@""];
            }else{
              [self.mexArr addObject:[dic objectForKey:@"message"]];
            }


        }

        [self.tableView reloadData];

     }];


}


- (void)viewDidLoad {
    [super viewDidLoad];
    [self loadData];
}

1 个答案:

答案 0 :(得分:1)

使用/ me / feed没有直接的方式,但您可以使用Batch Request一次获取所有数据。

这样的内容,发送到batch参数中的https://graph.facebook.com/v2.3/应返回图片的大小。

[
    {
        "method": "GET",
        "name": "get-feed",
        "relative_url": "me/feed"
    },
    {
        "method": "GET",
        "relative_url": "?ids={result=get-feed:$.data.*.object_id}"
    }
]