2010-12-19 65 views

回答

2

在深入研究代码并玩弄东西之后,我找到了一种方法来做到这一点,无论您在何处获得框架,都可能记录在案。

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

编辑: 在iCodeOauthViewController.m内FO viewDidAppear:(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: 看起来你的问题是你的tweet方法里面。鸣叫尝试后发送,并导致如果用户没有登录崩溃您已经添加了报警代码这里是你的代码:

-(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。如果您运行调试器并且您的应用程序崩溃,则调试器将停止在崩溃的代码中,您可以查看堆栈中的函数调用以确定代码做错了什么。请参阅this stack overflow question(特别是答案)以获取有关如何更好地开始使用objective-c的更多资源。我会推荐一些像CocoaDevCentral's教程的在线网站。 Remember this。基于一个例子,你尝试做出自己的东西是一个很好的开始。如果在主项目中没有马上解决问题,不要害怕做一个副项目,即使它找到了另一种方法来做2 + 2这样简单的事情。希望有所帮助。

+0

对不起,但我仍然在学习objective-c。你有可能向我提供代码吗? – Tapy 2010-12-20 17:17:02

+0

我想通过使用调试器发现此屏幕出现的位置以及授权的发生位置。你可能想尝试一下,看看你是否可以弄清楚,即使是上面的代码。首先在viewDidAppear:方法的顶部放置一个断点。 – slycrel 2010-12-20 19:50:35

+0

谢谢!我也设法给一个按钮的动作去页面。但有一件事我在调试器中弄不清楚。你会发现如果你没有输入用户名和密码就点击取消,并尝试发布应用程序崩溃的内容。是否可以显示警报或告诉用户他/她没有登录? – Tapy 2010-12-20 21:30:03