我将我的Xcode更新为7,将Facebook更新为4.6 sdk。
这是我的警告:
IL_0000: ldarg.1
IL_0001: castclass A
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: ldarg.0
IL_0009: ldc.i4.0
IL_000a: ldelem.ref
IL_000b: castclass System.Func`1[System.Int32]
IL_0010: callvirt Int32 Invoke()/System.Func`1[System.Int32]
IL_0015: callvirt Void set_Value(Int32)/A
IL_001a: ldloc.0
IL_001b: ldarg.0
IL_001c: ldc.i4.1
IL_001d: ldelem.ref
IL_001e: castclass IServiceFactory
IL_0023: ldarg.1
IL_0024: castclass A
IL_0029: call A Process(IServiceFactory, A)/TestClass
IL_002e: ret
在我的项目中,BitCode为NO - 因为如果我将其转为“是”,我会收到此错误:
Warning: Attempt to present <FBSDKContainerViewController: 0x159337700> on <UIAlertController: 0x159262700> whose view is not in the window hierarchy!
这是解析方法:
ld:'/Users/MyName/Desktop/MyProjectName/ProjectName/ProjectName/Resources/Frameworks/Fabric.framework/Fabric(Fabric.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
这是FBSDKGraphRequest:
-(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
}
}];
}
我的问题是该行:
-(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;
}];
运行永远不会进入iPhone的这个块,在模拟器中这个工作正常。
答案 0 :(得分:2)
我遇到了类似的问题,我试图在FBSDKContainerViewController上显示登录提醒。
在此次电话会议中
- (void)logInWithReadPermissions:(NSArray *)permissions
fromViewController:(UIViewController *)fromViewController
handler:(FBSDKLoginManagerRequestTokenHandler)handler;
Facebook提供了自己的视图控制器,如果你没有指定fromViewController,“最顶层的视图控制器将尽可能自动确定。”
在你的情况下,听起来Facebook试图在被解雇的警报之上呈现,即使这不是被调用的电话。
答案 1 :(得分:0)
你添加 NSAppTransportSecurity &amp;您的info.plist的 LSApplicationQueriesSchemes 键是什么?
答案 2 :(得分:0)
由于@ PastryPup的回答,我找到了解决方法。
尝试在已解除的警报视图上显示Facebook登录视图控制器时,会显示警告。但是,切换到UIAlertController可以解决问题。
我的印象是,这是有效的,因为UIAlertController是一个成熟的控制器,因此即使在它被解散后也存在于视图层次结构中。
解决方案是基本上用UIAlertController替换UIAlertView,并在UIAlerController的默认操作中调用[PFFacebookUtils logInInBackgroundWithReadPermissions:permissions block:^(PFUser *user, NSError *error)
。
答案 3 :(得分:0)
我做了一些技巧来完成这项工作。我不知道这是否是最佳方式。但是我只是在活动执行之前做了一个假的布尔值(点击了fb按钮)。因此,在它返回之后,只需将布尔值设置为true并在 ViewDidAppear 中有一个条件,如果布尔值为true,则执行segue到下一个要去的窗口。 我希望它有所帮助!