oAuth / MGTwitterEngine改变iPhone的用户?

时间:2010-12-19 22:28:48

标签: iphone objective-c mgtwitterengine

我正在使用oAuth / MGTwitterEngine为iphone开发推特应用程序 它所依据的来源是:http://icodeblog.com/wp-content/uploads/2010/09/iCodeOauth.zip

但我希望该应用的用户能够返回并更改用户名和密码,例如,如果用户拥有多个Twitter帐户。

是否可以为按钮提供操作以打开第一次打开应用时自动打开的页面。 (登录页面)

1 个答案:

答案 0 :(得分:2)

在深入研究代码并玩弄东西之后,我找到了一种方法来做到这一点,无论你在哪里获得框架,都可以记录下来。

查看iCodeOauthViewController.m,在viewDidAppear:内,您可以在引擎上调用isAuthorized,它会告诉您是否经过身份验证。如果返回yes,则可以调用引擎对象上的clearAccessToken方法来清除该身份验证。当下一次调用controllerToEnterCredentialsWithTwitterEngine: delegate:时,它将返回视图控制器以重新输入用户名和密码。

编辑: 在viewDidAppear里面的iCodeOauthViewController.m中:(第46行)你会看到这一行:

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

如果用户尚未登录,则此调用将返回您看到的登录屏幕。如果用户已登录,则返回nil。如果控制器为零,则直接跳转到列表。

要“注销”您可以使用此方法的用户:

- (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];
}

编辑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];

}

}

请注意,我们现在检查是否在尝试发送推文之前进行了身份验证,如果我们未经授权,则会弹出警报。我道歉,我可能因发布警报而误导了你,我误解了你在说什么。

我建议您尝试更多地了解objective-c的工作原理并获取familiar with the debugger。如果您运行调试器并且您的应用程序崩溃,调试器将停止在崩溃的代码中的点,并且您可以查看堆栈中的函数调用以确定代码出错的地方。有关如何更好地开始使用objective-c的更多资源,请参阅this stack overflow question(特别是答案)。我会推荐一些在线网站,如CocoaDevCentral's教程。 Remember this。根据一个例子,你有一个良好的开端尝试制作自己的东西。如果没有立即在你的主项目中工作,不要害怕做一个侧面项目来玩这个想法,即使它是一个简单的事情,如找出另一种做2 + 2的方式。希望有所帮助。