我正在使用oAuth / MGTwitterEngine为iphone开发推特应用程序 它所依据的来源是:http://icodeblog.com/wp-content/uploads/2010/09/iCodeOauth.zip
但我希望该应用的用户能够返回并更改用户名和密码,例如,如果用户拥有多个Twitter帐户。
是否可以为按钮提供操作以打开第一次打开应用时自动打开的页面。 (登录页面)
答案 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的方式。希望有所帮助。