我有这个代码,直到现在才能发送Facebook请求.
NSDictionary *firstDict = [NSDictionary dictionaryWithObjectsAndKeys: @"image", @"Type", @"http://mysite.com/image.jpg", @"src", @"http://mysite.com/page.html", @"href", nil]; NSDictionary *secondDict = [NSDictionary dictionaryWithObjectsAndKeys: @"image", @"Type", @"http://mysite.com/image.jpg", @"src", @"http://mysite.com/page.html", @"href", nil]; NSArray *mediaArray = [[NSArray alloc] initWithObjects:firstDict, secondDict, nil]; NSArray *keys = [NSArray arrayWithObjects:@"name", @"description", @"href", @"media", nil]; NSArray *objects = [NSArray arrayWithObjects: [NSString stringWithString:@"MyTitle"], [NSString stringWithString:@"My caption"], [NSString stringWithString:@"http://mysite.com/page.html"], mediaArray, nil]; NSDictionary *attachment = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; [[FBRequest requestWithDelegate:self] call:@"facebook.stream.publish" params:attachment];
我拿了这个样本:http://forum.developers.facebook.com/viewtopic.php?pid = 145965
但是每次运行它时,控制台都显示以下内容:
{ "api_key" = adc8d70987098sdc; "call_id" = 23456767; description = "Any user's description"; format = XML; href = "http://mysite.com/page.html"; media = ( { Type = image; href = "http://mysite.com/page.html"; src = "http://mysite.com/image.jpg"; }, { Type = image; href = "http://mysite.com/page.html"; src = "http://mysite.com/image.jpg"; } ); method = "Facebook.streamPublish"; name = aName; "session_key" = "d0f98bfs89b7fg7v"; sig = 89v0d9fv879fgv; ss = 1; v = "1.0"; }
它显示数组的括号而不是括号,这是正常的吗?
然后它显示错误:
*** -[NSCFArray dataUsingEncoding:]: unrecognized selector sent to instance 0x12fcb0 2009-10-30 13:54:27.758 GeoPixr[307:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: *** -[NSCFArray dataUsingEncoding:]: unrecognized selector sent to instance 0x12fcb0
[session resume]调用返回TRUE.
提前致谢.
如果您使用的是最新的iOS SDK For Facebook,则可以使用以下方法将图像作为流发布.
- (IBAction) publishStream: (id)sender { SBJSON *jsonWriter = [[SBJSON new] autorelease]; NSDictionary* actionLinks = [NSArray arrayWithObjects:[NSDictionary dictionaryWithObjectsAndKeys: @"Always Running",@"text",@"http://thinkdiff.net",@"href", nil], nil]; NSString *actionLinksStr = [jsonWriter stringWithObject:actionLinks]; NSDictionary* imageShare = [NSDictionary dictionaryWithObjectsAndKeys: @"image", @"type", @"http://thinkdiff.net/mahmud_small.jpg", @"src", @"http://thinkdiff.net", @"href", nil]; NSDictionary* attachment = [NSDictionary dictionaryWithObjectsAndKeys: @"a long run", @"name", @"The Facebook Running app", @"caption", @"it is fun", @"description", @"http://itsti.me/", @"href", [NSArray arrayWithObjects:imageShare, nil ], @"media", nil]; NSString *attachmentStr = [jsonWriter stringWithObject:attachment]; NSLog(attachmentStr); NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: kAppId, @"api_key", @"Share on Facebook", @"user_message_prompt", actionLinksStr, @"action_links", attachmentStr, @"attachment", nil]; [_facebook dialog: @"stream.publish" andParams: params andDelegate:self]; }
图像部分应该是另一个NSDictionary对象.
NSDictionary* imageShare = [NSDictionary dictionaryWithObjectsAndKeys: @"image", @"type", @"http://thinkdiff.net/mahmud_small.jpg", @"src", @"http://thinkdiff.net", @"href", nil];
在附件中,NSDictionary对象必须包含imageShare对象作为数组
[NSArray arrayWithObjects:imageShare, nil ]
这是因为如果你不将它包含在一个数组中,Json解析器会避免使用[]括号,因此发布功能将无效.请记住,字符串需要是有效的JSON字符串,否则facebook api将不会发布.