我的应用程序有登录的FBSDK并获取用户个人资料的信息。登录工作很好,但在某些我想获取用户信息的地方,我的应用程序只是忽略代码并跳转到下一行。
这是我的登录算法:
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login logInWithReadPermissions:@[@"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
if (error) {
// Process error
} else if (result.isCancelled) {
// Handle cancellations
} else {
// If you ask for multiple permissions at once, you
// should check if specific permissions missing
if ([result.grantedPermissions containsObject:@"email"]) {
// Do work
}
}
}];
它的工作完美,我的问题是当我尝试使用以下算法获取当前用户的名称时:
if ([FBSDKAccessToken currentAccessToken]) {
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
if (!error) {
NSLog(@"fetched user:%@", result);
_myUserName = result[@"name"];
}
}];
}
使用调试我注意到应用程序只是忽略了这部分代码。
我有什么遗漏或做错了吗?
[EDITED]
登录也不起作用...使用下面的NSLogs,它们都没有在控制台中打印。
if (error) {
// Process error
NSLog(@"1");
} else if (result.isCancelled) {
// Handle cancellations
NSLog(@"2");
} else {
NSLog(@"3");
// If you ask for multiple permissions at once, you
// should check if specific permissions missing
if ([result.grantedPermissions containsObject:@"email"]) {
// Do work
NSLog(@"4");
}
}
[EDITED2]
查看Facebook iOS SDK常见问题解答&故障排除我找到了这个解决方案
“FBSDKRequestConnection使用NSURLConnection,它需要一个活动的RunLoop。如果你在主线程之外使用它,你必须自己管理它。
或者,您可以在FBSDKRequestConnection上设置delegateQueue属性。“
所以,我只是使用
[self performSelectorOnMainThread:@selector(mySelector) withObject:nil waitUntilDone:YES];
现在没关系!谢谢!
答案 0 :(得分:0)
查看iOS SDK v4.0的升级指南,您不应再使用/me
调用了。相反,只需使用[FBSDKProfile currentProfile]
即可。也就是说,您使用的代码也应该有效。你有断点,看看哪个部分实际被跳过了吗?