2

FBUserSettingsViewControllerを使用しようとしていますが、閉じるたびにクラッシュします。次のコードを使用して表示します。

FBUserSettingsViewController *userSettings = [[FBUserSettingsViewController alloc] initWithNibName:nil bundle:nil];
userSettings.readPermissions = @[];
userSettings.publishPermissions = @[@"publish_actions"];
userSettings.defaultAudience = FBSessionDefaultAudienceEveryone;
userSettings.delegate = self;
[self.navigationController pushViewController:userSettings animated:YES];

正常に表示されますが、「戻る」を押すとすぐにクラッシュします。クラッシュは次の場所でのEXC_BAD_ACCESSです。

#0  0x34ae85de in objc_msgSend ()
#1  0x00136916 in -[FBUserSettingsViewController dealloc] at /Users/jacl/src/release/ios-sdk/src/FBUserSettingsViewController.m:86
#2  0x389e29c8 in -[UINavigationController navigationTransitionView:didEndTransition:fromView:toView:] ()
#3  0x389e249e in -[UINavigationTransitionView _notifyDelegateTransitionDidStopWithContext:] ()
#4  0x38978a82 in -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] ()
#5  0x389ed8ac in -[UIViewAnimationState animationDidStop:finished:] ()
#6  0x331a22e0 in CA::Layer::run_animation_callbacks(void*) ()
#7  0x30fe45da in _dispatch_client_callout ()
#8  0x30fe7e44 in _dispatch_main_queue_callback_4CF ()
#9  0x388c31b0 in __CFRunLoopRun ()
#10 0x3883623c in CFRunLoopRunSpecific ()
#11 0x388360c8 in CFRunLoopRunInMode ()
#12 0x30a3233a in GSEventRunModal ()
#13 0x389b7288 in UIApplicationMain ()
#14 0x00003424 in main at SNIP

誰かが私が何かを台無しにしたと私に言うことができれば、それは素晴らしいことですが、これはFacebookSDKのバグのように見えます。

4

1 に答える 1

2

問題を見つけました。Facebookは彼らのdeallocの間違いをコーディングしました。

FBUserSettingsViewControllerとFBViewControllerには、次のようなdeallocがあります。

- (void)dealloc {
    [super dealloc];

    [_profilePicture release];
    [_connectedStateLabel release];
    [_me release];
    [_loginLogoutButton release];
    [_permissions release];
    [_backgroundImageView release];
    [_bundle release];
}

これは間違っています。[superdealloc]は常に最後に呼び出されることになっています。メンバーの割り当てを解除しようとする前に、オブジェクトが破棄されています。(最後にdeallocを使用して)順序を切り替えましたが、現在は機能しています。これについてバグを報告します。

于 2012-10-10T23:31:34.227 に答える