2017-02-08 3 views
0

2つのテキストボックス(ユーザー名とパスワード)でログインしようとしています。私はこれらの2つの変数をWebサービスに送り、ユーザー名とパスワードの有無を確認しています。私は、これらの2つの値に関して、Webサービスからのメッセージ "成功"または "失敗"として応答を取得します。それから私はそのメッセージを取得しており、そのメッセージで私はフラグ値を設定しています。しかし、セッションの後、私はそのフラグ値を取得していません。デフォルト値falseを示します。URLSessionデータタスクで変数を設定するにはどうすればよいですか?

問題は、URLSessionとデータタスクを使用してWebサービスを呼び出すボタンアクションでログインしたいのですが、フラグを設定できません。私はNSURL同期要求でそれを行うことができますが、そのコードは非難されています。

ログインボタンアクション機能とウェブサービス機能のコードの画像を表示できます。 login button action web service function

ありがとうございます。

+0

リンクをクリックしてコードの画像を見るつもりはありません。コードタグでマークされた関連コードをここに投稿してください。この問題はほとんどの場合、ログイン・タスクが非同期であり、補完ハンドラまたはデリゲート・メソッドがコールされるまで、結果は使用できません。したがって、コードを再構成する必要がありますが、投稿するまでコードの再構成方法を教えてください。 –

答えて

1

webServiceCalledMethodの方法は間違っています。 URLSessionに関連するタスクは非同期的に実行されます。その結果、dataTaskが実行される前に変数isLoginが返されます。

非同期メソッドからBoolを返す代わりに、データタスクの完了状態を通知するためにclosureまたはdelegateパターンを使用します。

+0

ありがとうございます。タスクが実行される前に戻っています。私はそれをチェックした。 &はいそれは非同期メソッドです。なぜNSURLの同期メソッドで試していたのですが、非推奨です。私はURLSessionを使うべきだという示唆を与えています。しかし、私はセッションが非同期か同期かを理解することができませんでした。最後に、私は待ち時間のためにセマフォを使いました。どうもありがとう。 – aditya

+0

いいえ、セマフォも使用しないでください。それでもメインスレッドはブロックされます。非同期タスクが完了した後に呼び出されるコンプリートブロックを渡すコードをリファクタリングする必要があります。あなたはそれを理解するまで、その概念をやめて読む必要があります。 –

+0

大丈夫です。ありがとう@DuncanC – aditya

関連する問題