oAuth / MGTwitterEngine сменить пользователя на iPhone? - PullRequest
0 голосов
/ 20 декабря 2010

Я работаю над приложением для iphone, использующим oAuth / MGTwitterEngine. Источник, на котором он основан, находится здесь: http://icodeblog.com/wp-content/uploads/2010/09/iCodeOauth.zip

Но я хочу, чтобы пользователь приложения мог вернуться иизмените имя пользователя и пароль, если, например, у пользователя более одной учетной записи в Twitter.

Можно ли дать кнопке действие для открытия страницы, которая открывается автоматически при первом запуске приложения.(Вход на страницу)

1 Ответ

2 голосов
/ 20 декабря 2010

После копания в коде и игры с вещами я нашел способ сделать это, который, вероятно, задокументирован везде, где у вас есть фреймворк.

Глядя на iCodeOauthViewController.m, внутри viewDidAppear: вы можете вызвать isAuthorized на двигателе, и он скажет вам, если вы аутентифицированы или нет.Если это возвращает да, вы можете затем вызвать метод clearAccessToken на объекте механизма, чтобы очистить эту аутентификацию.При следующем вызове controllerToEnterCredentialsWithTwitterEngine: delegate: он вернет контроллер представления для повторного ввода имени пользователя и пароля.

edit: в iCodeOauthViewController.m внутри viewDidAppear: (строка 46) вы увидите эту строку:

UIViewController *controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _engine delegate: self];

этот вызов возвращает экран входа в систему, который вы видите, если пользователь еще не вошел в систему. Если пользователь вошел в систему, он возвращает ноль.Если контроллер равен нулю, он сразу переходит к списку.

для «выхода» из системы пользователя, вы можете использовать этот метод:

- (void)switchUser
{
    // log off the existing user if one is validated
    if ([_engine isAuthorized])
        [_engine clearAccessToken];

    // display the login prompt
    UIViewController *controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _engine delegate: self];       
    if (controller) 
        [self presentModalViewController: controller animated: YES];
}

edit 2: похоже, ваша проблема внутритвой метод твита.Вы добавили код предупреждения после попытки отправки твита, и это приведет к сбою, если пользователь не вошел в систему. Вот ваш код:

-(IBAction)tweet:(id)sender {

    [textfield resignFirstResponder];
    [_engine sendUpdate:[textfield text]];
    [self updateStream:nil];


    if([_engine isAuthorized]==NO){UIAlertView *alert = [[UIAlertView alloc]
                                                         initWithTitle: @"Please, Sign in"
                                                         message: @"You'll have to sign in for this app to work!"
                                                         delegate: nil
                                                         cancelButtonTitle:@"Ok"
                                                         otherButtonTitles:nil];
        [alert show];
        [alert release];
        }
}

измените его так, чтобы он выглядел следующим образом:

-(IBAction)tweet:(id)sender {


if([_engine isAuthorized]==NO){
    UIAlertView *alert = [[UIAlertView alloc]
                                                     initWithTitle: @"Please, Sign in"
                                                     message: @"You'll have to sign in for this app to work!"
                                                     delegate: nil
                                                     cancelButtonTitle:@"Ok"
                                                     otherButtonTitles:nil];
    [alert show];
    [alert release];
    }
else {
    [textfield resignFirstResponder];
    [_engine sendUpdate:[textfield text]];
    [self updateStream:nil];

}

}

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

Я бы порекомендовал немного больше понять, как работает target-c, и познакомиться с .отладчик .Если вы запустите отладчик, и ваше приложение будет аварийно завершено, отладчик остановится в той точке кода, где происходит сбой, и вы можете просмотреть вызовы функций в стеке, чтобы определить, что код делает неправильно.См. этот вопрос о переполнении стека (в частности ответы) для получения дополнительных ресурсов о том, как лучше начать работу с target-c.Я бы порекомендовал некоторые из онлайн-сайтов, такие как CocoaDevCentral's руководства. Запомните это .Вы хорошо начинаете пытаться сделать что-то свое на основе примера.Не бойтесь создать сторонний проект, чтобы поиграть с идеей, если она не сразу сработает в вашем основном проекте, даже если это что-то столь же простое, как поиск другого способа сделать 2 + 2. Надеюсь, что это поможет.

...