这是我从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'
答案 0 :(得分: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
,告知该对象不是“引用”。不过,我很高兴被证明是错的。
答案 1 :(得分: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);
}];
}