0

Facebook 3.7 for iOS、App の認証に対応。70% の確率で動作し、残りの 30% はクラッシュします。インターネットに接続されているかどうかは関係ないようです。以下の最初のメソッド populateUserDetails では、ディクショナリが nil かどうかを確認します。これにより、この問題は停止すると思いますが、それでも発生します。

これが私のエラーです:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: 0_auth_logger_id)'

これが私の認証コードです:

- (void)populateUserDetails
{
if (FBSession.activeSession.isOpen) {
    [[FBRequest requestForMe] startWithCompletionHandler:
     ^(FBRequestConnection *connection,
       NSDictionary<FBGraphUser> *user,
       NSError *error) {
         if (!error || ![user isEqualToDictionary: nil]) {
             // if (!error) {
             self.userNameLabel.text = [user objectForKey:@"email"];
             email = [user objectForKey:@"email"];
             //      self.userProfileImage.profileID = user.id;

             if ([facebookUser isEqualToString:@"yes"]){
             [self appendAndSaveData];
             [self performSegueWithIdentifier:@"segueIntroScreenLogin" sender:self];
             }

         }
     }];
}
}

-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];

if (FBSession.activeSession.isOpen) {
[self populateUserDetails];
}
}

-(void)logoutButtonWasPressed:(id)sender {
[FBSession.activeSession closeAndClearTokenInformation];
}


- (IBAction)performLogin:(id)sender
{
 facebookUser = @"yes";
 NSLog(@"IntroScreen, email: %@", email);
 AppDelegate* appDelegate = [UIApplication sharedApplication].delegate;
 [appDelegate openSession];

    if([email length] >0){

     [self appendAndSaveData];
     [self performSegueWithIdentifier:@"segueIntroScreenLogin" sender:self];
 }

}

4

2 に答える 2

0

あなたのコードには NSMutableDictionary の値を設定するための参照がないように見えますが、終了メッセージはおそらく setObject:forKey: メソッドのキーとして nil を渡すことができないという事実を参照しています。スタック トレースを投稿すると役立ちますが、それがない場合は、setObject:forKey の呼び出しを探し、forKey 引数が非 nil であることを確認してください。

于 2013-08-28T01:15:09.180 に答える
0

これを試して:

  1. お気に入りのエディターで開きます。

    [facebook_sdk_folder]/src/FBSession.m
    

930 ~ 940 行あたりに、次のコードがあります。

if (permissions != nil) {
  NSString* scope = [permissions componentsJoinedByString:@","];
  [params setValue:scope forKey:@"scope"];
}

に変更します

if (permissions != nil) {
  NSString* scope = [permissions componentsJoinedByString:@","];
  if( scope )  // << add this line
    [params setValue:scope forKey:@"scope"];
}

その後、フレームワークを再構築します

[facebook_sdk_folder]/scripts/build_framework.sh

( [facebook_sdk_folder]/build/FacebookSDK.framework にある新しく生成されたフレームワークがプロジェクトに含まれていることを確認してください)

于 2013-09-18T22:49:22.017 に答える