Диалог входа в Facebook не будет работать с UIAlertView, но работает с UIButton - PullRequest
0 голосов
/ 05 сентября 2011

У меня есть этот кусок кода, который я использую для отображения диалогового окна входа / публикации на стене пользователя:

_posting = YES;
// If we're not logged in, log in first...
if (![_session isConnected]) {
    self.loginDialog = nil;
    loginDialog = [[FBLoginDialog alloc] init]; 
    [_loginDialog show];
}
// If we have a session and a name, post to the wall!
else if (_facebookName != nil) {
    [self postToWall];
}
// Otherwise, we don't have a name yet, just wait for that to come through.

Если я подключу этот код к кнопке, он будет работать.Однако, когда я помещаю его в следующий метод:

- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    // the user clicked one of the OK/Cancel buttons
    if (buttonIndex == 0)
    {
        NSLog(@"No");
    }
    else
    {       
        _posting = YES;
        // If we're not logged in, log in first...
        if (![_session isConnected]) {
            self.loginDialog = nil;
            _loginDialog = [[FBLoginDialog alloc] init];    
            [_loginDialog show];
        }
        // If we have a session and a name, post to the wall!
        else if (_facebookName != nil) {
            [self postToWall];
        }
        // Otherwise, we don't have a name yet, just wait for that to come through.

    }
}

Это не работает ..

Может кто-нибудь объяснить, почему это может быть?Когда я говорю, что это не работает, я имею в виду, что диалоговое окно отображается очень коротко, прежде чем закрыться.Приложение не падает.

Ответы [ 3 ]

7 голосов
/ 07 февраля 2012

Ожидание 1 сек не является решением и фактически не решает проблему.

Проблема в том, что вы слушаете:

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

Что должно быть:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex

Поскольку при функции clickedButtonAtIndex представление не закрывается, и это может вызвать проблемы.

Edit: Чтобы это работало в iOS 4, добавьте в метод вызов через Facebook и вызовите следующую функцию в didDismissWithButtonIndex:

[self executeSelectorOnMainThread: @selector (facebookOpenAction) withObject: nil waitUntilDone: NO];

0 голосов
/ 28 октября 2011

Это больше не проблема в iOS 5.

Я не рассматриваю это как решение, скорее быстрое исправление / взлом.Ожидание задержки в 1 секунду может показаться немного долгим, интересно, как низко эта задержка может быть установлена, симулятор не должен использоваться для оценки этого, и у меня больше нет устройства под управлением iOS 4. Было бы интересно узнать,

Возможно, было бы лучше добавить KVO к объекту просмотра предупреждений, чтобы иметь более точное представление о том, когда он уничтожен, и вызвать диалог в этой точке.

0 голосов
/ 09 сентября 2011

Разобрался, используя следующую строку в условном выражении вместо кода диалога facebook:

[self performSelector:@selector(showFBLoginDialog) withObject:nil afterDelay:1];

Похоже, вам нужно подождать, пока ресурсы, связанные с представлением предупреждений, станут доступными.

РЕДАКТИРОВАТЬ: метод showFBLoginDialog содержит код диалога, который был первоначально в условном.

...