在 iOS 应用程序中使用 Facebook Graph Api 获取新闻提要
Get newsfeed with Facebook GraphApi in iOS App
我需要在我的 UITableView 中查看 facebook 新闻源。我向服务器发送了一个异步请求,并且获得了新闻源列表。问题是我没有为每个提要获取图像的大小,因此我必须向嵌套到先前异步请求的服务器发送另一个异步请求。这段代码效率很低,因为我必须反复重新加载我的 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];
}
没有直接使用 /me/feed 的方法,但是您可以使用 Batch Request 一次获取所有数据。
类似这样的东西,在 batch
参数中发送到 https://graph.facebook.com/v2.3/ 应该 return 图片的大小。
[
{
"method": "GET",
"name": "get-feed",
"relative_url": "me/feed"
},
{
"method": "GET",
"relative_url": "?ids={result=get-feed:$.data.*.object_id}"
}
]
我需要在我的 UITableView 中查看 facebook 新闻源。我向服务器发送了一个异步请求,并且获得了新闻源列表。问题是我没有为每个提要获取图像的大小,因此我必须向嵌套到先前异步请求的服务器发送另一个异步请求。这段代码效率很低,因为我必须反复重新加载我的 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];
}
没有直接使用 /me/feed 的方法,但是您可以使用 Batch Request 一次获取所有数据。
类似这样的东西,在 batch
参数中发送到 https://graph.facebook.com/v2.3/ 应该 return 图片的大小。
[
{
"method": "GET",
"name": "get-feed",
"relative_url": "me/feed"
},
{
"method": "GET",
"relative_url": "?ids={result=get-feed:$.data.*.object_id}"
}
]