3

这是我从 Facebook 获得的使用自定义对象的示例代码。我使用自定义操作创建了这个以利用 Facebook 故事。
Facebook 文档:
https ://developers.facebook.com/docs/opengraph/overview/

NSMutableDictionary<FBGraphObject> *object =
[FBGraphObject openGraphObjectForPostWithType:@"sotd_facebook:new_zombie"
                                        title:@"Sample New Zombie"
                                        image:@"https://fbstatic-a.akamaihd.net/images/devsite/attachment_blank.png"
                                          url:@"http://samples.ogp.me/191078581053171"
                                  description:@""];;

[FBRequestConnection startForPostWithGraphPath:@"me/objects/sotd_facebook:new_zombie"
                               graphObject:object
                         completionHandler:^(FBRequestConnection *connection,
                                             id result,
                                             NSError *error) {
                             // handle the result
                         }];

我很好奇如何在 Facebook IOS sdk 中使用这个对象进行操作。我尝试使用以下代码,但它在创建 FBRequestConnection 时崩溃。

[__NSCFBoolean dataUsingEncoding:]: unrecognized selector sent to instance 0x3af00530
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFBoolean dataUsingEncoding:]: unrecognized selector sent to instance 0x3af00530'

[编辑]
我创建了 FBOpenGraphObject 并使用 FBRequestConnection 方法 startForPostOpenGraphObject: completionHandler。在完成处理程序中,我从结果中检索 id 并将其放入具有 id 的另一个 FBOpenGraphObject 中。它仍然崩溃。

NSMutableDictionary<FBOpenGraphObject> *object = [FBGraphObject
                                                  openGraphObjectForPostWithType:@"sotd_facebook:new_zombie"
                                                  title:@"Sample New Zombie"
                                                  image:@"https://fbstatic-a.akamaihd.net/images/devsite/attachment_blank.png"
                                                  url:@"http://samples.ogp.me/191078581053171"
                                                  description:@""];



[FBRequestConnection startForPostOpenGraphObject:object
                               completionHandler:^(FBRequestConnection *connection,
                                                   id result,
                                                   NSError *error) {
                                   // handle the result
                                   // handle the result
                                   if (error)
                                   {
                                       NSLog(@"Error sharing story: %@", error.localizedDescription);
                                   }
                                   else if(result != nil)
                                   {
                                       NSLog(@"Result: %@", result);
                                       NSString* resultID = [result objectForKey:@"id"];

                                       NSMutableDictionary<FBOpenGraphObject> *newObject = [FBGraphObject openGraphObjectForPost];
                                       newObject.id = resultID;


                                       [FBRequestConnection startForPostWithGraphPath:@"me/objects/sotd_facebook:new_zombie"
                                                                          graphObject:newObject                                                                        completionHandler:^(FBRequestConnection *connection,
                                                                                        id result,
                                                                                        NSError *error) {
                                                                        // handle the result
                                                                        // handle the result
                                                                        if (error)
                                                                        {
                                                                            NSLog(@"Error sharing story: %@", error.localizedDescription);
                                                                        }
                                                                        else
                                                                        {
                                                                            NSLog(@"Result: %@", result);
                                                                        }

                                                                    }];
                                   }

                               }]; 

崩溃日志:

2013-08-16 18:47:11.013 ZombieBlackout[3408:907]-[__NSCFBoolean dataUsingEncoding:]:无法识别的选择器发送到实例 0x3a118530 2013-08-16 18:47:11.015 ZombieBlackout[3408:907] *终止应用程序未捕获的异常“NSInvalidArgumentException”,原因:“-[__NSCFBoolean dataUsingEncoding:]:无法识别的选择器发送到实例 0x3a118530”

4

2 回答 2

0

我遇到了同样的问题。您首先需要发布对象,然后获取其 ID,并提供对象 ID 而不是对象本身:

NSMutableDictionary<FBOpenGraphObject> *object = [...];
[FBRequestConnection startForPostOpenGraphObject:object completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
                if(result != nil){
                    NSString* resultID = [result objectForKey:@"id"];
                    [FBRequestConnection startForPostWithGraphPath:@"me/objects/sotd_facebook:new_zombie"
                               graphObject:resultID //...

该对象首先作为对象发布到 Facebook,然后您可以对该对象使用操作 (new_zombie)。我也处于完全相同的情况(启用了 2013 年 7 月的重大更改)试图找出在 Facebook 上一步创建所有内容,但如果不使用单独的自托管网络服务器就无法弄清楚。在我的问题中,我收到关于对象已发布且无法再次发布的错误消息。如果你没有这个问题,你现在可以继续这个。

似乎错误本身是由对象字典中的fbsdk:create_object键(及其值)引起的。1此密钥由 Facebook SDK 自动添加到对象中。当我在发布之前明确删除此密钥时,它没有在发布时引发异常,但我关于发布对象的回答仍然适用。即使您删除了该密钥,您也会OAuthException在服务器端获得一个,告诉该对象不是“引用”。不过,我真的很高兴被证明是错误的。

于 2013-07-15T12:41:39.247 回答
0

我刚刚在 API 调用之前添加了这些行,效果很好!

    object[@"create_object"] = @"1";
    object[@"fbsdk:create_object"] = @"1";

这似乎是 Facebook SDK 中的一个错误!它试图编码布尔值

示例代码应该是这样的

    NSMutableDictionary<FBGraphObject> *object =
        [FBGraphObject openGraphObjectForPostWithType:@"{YOUR NAMESPACE}:{YOUR OBJECT TYPE}"
                                                title:@"title"
                                                image:@"https://fbstatic-a.akamaihd.net/images/devsite/attachment_blank.png"
                                                  url:@"http://samples.ogp.me/192059197639963"
                                          description:@"description"];

    object[@"create_object"] = @"1";
    object[@"fbsdk:create_object"] = @"1";

    [FBRequestConnection startForPostWithGraphPath:@"me/objects/{YOUR NAMESPACE}:{YOUR OBJECT TYPE}"
                                       graphObject:object
                                 completionHandler:^(FBRequestConnection *connection,
                                                     id result,
                                                     NSError *error) {
                                     NSLog(@"%@",result);
                                 }];
}
于 2013-09-12T06:30:26.473 回答