单击“警报视图”按钮(iOS)后Facebook Web对话框崩溃

时间:2013-04-03 14:39:39

标签: ios facebook modal-dialog alertview

我正在尝试将iOS应用程序与Facebook集成。登录和大多数功能都运行良好,但当我尝试让FBWebDialogs分享用户发布的内容时,我遇到了一个小问题。如果在发布(调用函数)之后直接调用它会很好,但是当我尝试从警报视图执行相同操作时崩溃,它刚刚开始出现并突然消失,然后完全加载而不会破坏应用程序并且不会抛出任何错误。当用户登录iPhone的设置时,它使用iOS 6中具有原生视图而不是FBWebDialogs的新Facebook功能。 我正在使用第三方库来自定义警报视图,但它在标准警报视图中也是如此。

我认为这可以解雇观点,但对iOS的知识不足以确定。任何的想法?。谢谢。

这就是代码:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{

    switch (buttonIndex)
    {
        case 1:
        {
            [self sharePostOnFacebook];
            break;
        }
        default:
            break;
    }
}

调用下一个方法,但模态视图永远不会完全出现。它只是闪烁并消失

-(void) sharePostOnFacebook
{
    if (shareData !=nil && [[shareData objectForKey:@"success"] boolValue])
    {
        NSString *caption = [shareData objectForKey:@"caption"];
        . ..........


        BOOL displayedNativeDialog =
        [FBNativeDialogs
         presentShareDialogModallyFrom:self
         initialText:description
         image:[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:picture]]]
         url:[NSURL URLWithString:link]
         handler:^(FBNativeDialogResult result, NSError *error) {

             .........
         }];
        // Fallback, show the view controller that will post using me/feed
        if (!displayedNativeDialog)
        {
            [[[self presentingViewController] presentingViewController] dismissModalViewControllerAnimated:YES];

            // Put together the dialog parameters
            NSMutableDictionary *params =
            [NSMutableDictionary dictionaryWithObjectsAndKeys:
             .............
             nil];

            FBSession *activeSession = [FBSession activeSession];
            // Invoke the dialog
            [FBWebDialogs presentFeedDialogModallyWithSession:activeSession
                                                   parameters:params
                                                      handler:
             ^(FBWebDialogResult result, NSURL *resultURL, NSError *error) {
                ........
             }];
        }

    }

}

2 个答案:

答案 0 :(得分:3)

以下是我与之达成的解决方案(https://developers.facebook.com/docs/howtos/send-requests-using-ios-sdk/)。

关键似乎是延迟了对FBWebDialog的调用。

[self performSelector:@selector(sendRequest) withObject:nil afterDelay:0.5];

sendRequest就可以了

- (void)sendFlyerFloRequestToFriends
{
    NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:nil];
   [FBWebDialogs presentRequestsDialogModallyWithSession: ...

如果使用performSelector调用presentRequestsDialogModallyWithSession(使用延迟),那么崩溃问题似乎消失了 - 不知道为什么,但似乎在我的最终工作。

答案 1 :(得分:0)

迟到的答案..但是对于记录......我已经使用:

修复了它
-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex;

而不是:

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex;

我认为问题与在显示UIAlertView时呈现的FBWebDialog有关。使用'didDismiss'确保在显示webdialog时警报已经消失。