0

我使用以下代码向图形 api 发送请求并将其显示在标签中

    [FBRequestConnection startWithGraphPath:@"40123148903?fields=picture" completionHandler:^(FBRequestConnection *connection, id<FBGraphObject> result, NSError *error)
     {
         if(!error)
         {
              self.tryLabal.text = [[[result objectForKey:@"picture"] objectForKey:@"data"]objectForKey:@"url"];

         }
     }
     ];

问题是它只允许我使用块内的图形对象。我想保留返回的结果。

我尝试声明一个 id 属性并将其分配给结果 id

self.tryGraphObject = result;

感谢这里的一位成员,我得到了更多信息:在 ios facebook sdk 3.0 中,我们使用 facebook 委托处理了图形 api 调用的结果,该委托在回复返回时被调用。现在在 3.1 中,他们更改了逻辑,以便每个请求都带有一个名为“完成处理程序”的块,可以让您处理结果。问题是我无法保存结果以供进一步使用,因为由于某种原因它不允许我

编辑:原来我错了,问题是不同的。我打破了代码,结果发现我认为它没有设置属性,但确实如此。就在视图加载之后。基本上它在等待来自 Facebook 的回复时一直运行代码,这意味着视图在返回值之前加载,因此它显示基于空属性的视图。我能做些什么?

4

1 回答 1

-2

在您的块上方,您可以声明一个像这样制作的图形类

__block FBGraphObject *graphObject = self.tryGraphObject;

然后在块中,将它设置为graphObject,它应该指向你的self.tryGraphObject,当你在块中设置它时,它应该希望设置它。我还没有完全测试过这个。

另一种可能性是做

self.trypGraphObject = [result copy];

我唯一能想到的另一件事是结果对象是一个id,所以在设置之前尝试对其进行类型转换

self.tryGraphObject = (FBGraphObject *)[result copy];

或者

FBGraphObject *graph = (FBGraphObject *)result;
self.tryGraphObject = graph;

这就是我现在能想到的。我希望这能为您指明正确的方向。

于 2012-11-20T15:08:13.233 回答