Objective c 更新iOS 9和Facebook sdk 4.6后,登录窗口不会打开

Objective c 更新iOS 9和Facebook sdk 4.6后,登录窗口不会打开,objective-c,ios9,facebook-sdk-4.0,Objective C,Ios9,Facebook Sdk 4.0,我将Xcode更新为7,将Facebook更新为4.6SDK 这是我的警告: Warning: Attempt to present <FBSDKContainerViewController: 0x159337700> on <UIAlertController: 0x159262700> whose view is not in the window hierarchy! 这是解析方法: -(void)signInWithFacebookClicked { NSAr

我将Xcode更新为7,将Facebook更新为4.6SDK

这是我的警告:

Warning: Attempt to present <FBSDKContainerViewController: 0x159337700> on <UIAlertController: 0x159262700> whose view is not in the window hierarchy!
这是解析方法:

-(void)signInWithFacebookClicked
{
NSArray *permissions = [NSArray arrayWithObjects:@"email",@"user_friends", nil];
[PFFacebookUtils logInInBackgroundWithReadPermissions:permissions block:^(PFUser *user, NSError *error)
 {
     if (!user) // The user cancelled the Facebook login
     {
         NSLog(@"Uh oh. The user cancelled the Facebook login.");
     }
     else if (user.isNew) // New user (not stored on DB) - User signed up and logged in through Facebook
     {
         [self handleNewUser];
     }
     else if (user) // the user is exist at DB
     {
       // the user is exist at DB  
     }
     else if (error)
     {
        // showAlertOfSomethingWentWrong
     }
 }];
}
这是FBSDKGRAPH请求:

-(void)handleNewUser
{

FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"friends, first_name, gender, last_name, link, name, verified, picture, email"}];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error)
 {
     NSMutableDictionary *userData = (NSMutableDictionary *)result;
}];
我的问题是那句话:

[PFFacebookUtils logInInBackgroundWithReadPermissions:permissions block:^(PFUser *user, NSError *error)

在iPhone中,运行永远不会进入此块,在模拟器中,这工作正常。

您是否将NSAppTransportSecurity&LSApplicationQueriesSchemes键添加到您的info.plist?

我遇到了一个类似的问题,当时我正试图在FBSDKContainervicewcontroller顶部显示登录警报

在这个电话里

- (void)logInWithReadPermissions:(NSArray *)permissions
          fromViewController:(UIViewController *)fromViewController
                     handler:(FBSDKLoginManagerRequestTokenHandler)handler;
Facebook提供了自己的视图控制器,如果您不指定fromViewController,“最顶层的视图控制器将自动确定为尽可能最佳的视图控制器。”


在你的情况下,听起来Facebook正试图在一个被撤销的警报之上呈现,即使这不是正在调用的呼叫。

多亏了@PastryPup的回答,我确实找到了解决方法

当试图将Facebook登录视图控制器显示在已关闭的alertview上时,将显示警告。然而,切换到UIAlertController解决了这个问题

我的印象是,这之所以有效,是因为UIAlertController是一个成熟的控制器,因此即使在视图层次结构中已被取消,它仍然存在

解决方案基本上是用UIAlertController替换UIAlertView,并在UIAlertController的默认操作内调用
[PFFacebookUtils LoginBackgroundithReadPermissions:permissions block:^(PFUser*user,NSError*error)


我做了一些技巧来实现这一点。我不知道这是否是最好的方法。但我只是在活动执行之前做了一个布尔值,该值为false(点击fb按钮)。因此,在它返回后,只需将布尔值设置为true,并在ViewDid中显示一个条件,即如果布尔值为true,则执行到下一个要转到的窗口的步骤。
我希望有帮助!

我想这个链接可以帮助你:不适合我):我编辑这个问题你找到解决办法了吗?在Facebook中打开登录,但在iPhone中窗口没有打开。嗨!我也有同样的问题!但是在有写权限的登录中…你是如何解决的?@rickrvo-我根本无法访问我的代码或者,但我想我要么指定了fromViewController,这样Facebook就不会推断出错误的视图,要么我确保我显示的警报不再显示。我找到了一个解决方法!问题是,在另一个具有ReadPermissions的登录之后,立即调用了具有WritePermissions的登录…而iOS没有时间返回到该应用程序在调用loginWithWritePermissions之前,它会得到一个不同的viewController。一个快速修复方法是在WritePermissions调用之前添加1秒延迟,以便iOS可以切换回应用程序,然后第二次调用工作正常
- (void)logInWithReadPermissions:(NSArray *)permissions
          fromViewController:(UIViewController *)fromViewController
                     handler:(FBSDKLoginManagerRequestTokenHandler)handler;