我正在使用Parse SDK在我的应用中实现Facebook apprequests
对话框。对于所有意图和目的,它只包装Facebook SDK,为Facebook方法添加PF_
前缀。
我使用此代码准备并引发对话框:
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: [NSString stringWithFormat:@"I just challenged you to a game!"], @"message",
[friendIds componentsJoinedByString:@"," ], @"to",
nil];
PF_FBSession *session = [PFFacebookUtils session];
PF_Facebook *facebook = [[PF_Facebook alloc] initWithAppId:session.appID andDelegate:nil];
facebook.accessToken = session.accessToken;
facebook.expirationDate = session.expirationDate;
[facebook dialog:@"apprequests" andParams:params andDelegate:self];
这很有效,我正在接收对话框,我可以邀请朋友一起玩该应用。
问题是没有调用委托方法,即使我已将视图控制器设置为PF_FBDialogDelegate
:
@interface ChallengeFriendsViewController : UIViewController <UITableViewDelegate, PF_FBDialogDelegate> {
NSArray *facebookFriends;
NSMutableArray *selectedFriends;
}
这些是我正在讨论的一些委托方法:
- (void)dialog:(PF_FBDialog *)dialog didFailWithError:(NSError *)error {
NSLog(@"Error in Dialog: %@", error);
}
- (void)dialogDidNotCompleteWithUrl:(NSURL *)url {
NSLog(@"Failure on Facebook server side");
}
- (void)dialogCompleteWithUrl:(NSURL *)url {
NSLog(@"Did complete with URL");
[self.navigationController popViewControllerAnimated:YES];
[MBProgressHUD hideAllHUDsForView:self.view animated:YES];
}
- (void)dialogDidNotComplete:(PF_FBDialog *)dialog {
NSLog(@"Cancelled");
[MBProgressHUD hideAllHUDsForView:self.view animated:YES];
}
如果没有调用这些方法,我真的无法以直观的方式处理共享。我很难过为什么他们不会被打电话,觉得我已经尝试了一切。我指出哪里错了?
答案 0 :(得分:3)
在您的代码中
PF_Facebook *facebook = [[PF_Facebook alloc] initWithAppId:session.appID andDelegate:nil];
由于你设置了一个nil委托,我希望永远不会调用委托方法,如你所描述的那样。
您可以将其更改为
PF_Facebook *facebook = [[PF_Facebook alloc] initWithAppId:session.appID andDelegate:self];
假设您将委托方法放在同一个类中。
答案 1 :(得分:0)
我终于使用facebook
提供的PFFacebookUtils
实例解决了这个问题。这已被弃用,但似乎是目前调用正确的委托方法的唯一方法。
替换:
PF_Facebook *facebook = [[PF_Facebook alloc] initWithAppId:session.appID andDelegate:nil];
使用:
PF_Facebook *facebook = [PFFacebookUtils facebook];
感谢JP和Aromal的投入。