コードを掘り下げて遊んだ後、私はこれを行う方法を見つけたので、おそらくフレームワークがあればどこにでも書かれています。
viewDidAppear:
の中にあるiCodeOauthViewController.mを見ると、エンジンでisAuthorized
と呼ぶことができ、認証されているかどうかを教えてくれます。これでyesが返された場合は、エンジンオブジェクトのclearAccessToken
メソッドを呼び出してその認証をクリアすることができます。 controllerToEnterCredentialsWithTwitterEngine: delegate:
が次に呼び出されると、ユーザー名とパスワードを再入力するためのView Controllerが返されます。
編集:viewDidAppear FO内部iCodeOauthViewController.mで :
UIViewController *controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _engine delegate: self];
この呼び出しは、ユーザーがまだログインしていないかどうかを確認ログイン画面を返します(行46)あなたは、この行が表示されます。ユーザーがログインしている場合は、nilを返します。コントローラが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を行う別の方法を考え出すのと同じくらい単純なものであっても、メインプロジェクトですぐにはうまくいかない場合は、アイデアを持ち歩くためにサイドプロジェクトを作成することを恐れないでください。
申し訳ありませんが、私はまだ客観的なことを学んでいます。コードを私に提供することは可能でしょうか? – Tapy
私は、この画面が表示された場所と、デバッガを使用して承認が行われている場所を把握しました。これを試して、上のコードを使っても分かるかどうかを確認してください。まず、viewDidAppear:メソッドの最上部にブレークポイントを配置します。 – slycrel
ありがとう!私はまた、ページに行くためのアクションをボタンに与えることもできました。しかし、私がデバッガで理解できなかったことが1つあります。ユーザー名とパスワードを入力せずにキャンセルをクリックして、アプリがクラッシュするものを投稿しようとすると、彼/彼女がサインインしていないことを知らせる警告や何かを表示することは可能でしょうか? – Tapy