iOS アプリケーションで Web サービスからデータを取得する際に問題が発生しています。LoginService という NSObject クラスがあります。ユーザーが [ログイン] をクリックすると、LoginService の loginWithUsername メソッドが ViewController から呼び出されます。
LoginService で、LoginServiceDelegate というデリゲートを作成しました。LoginService.h のコードは次のとおりです。
//Creating custom delegate
@protocol LoginServiceProtocol <NSObject>
-(void)loginResult:(NSDictionary*)loginData;
@end
@interface LoginService : NSObject<NSURLConnectionDataDelegate>{
NSMutableData* _responseData;
id<LoginServiceProtocol>_delegate;
}
@property(nonatomic,strong)id<LoginServiceProtocol>delegate;
//End of custom delegate creation
LoginService.m で実装:
-(void)loginResult:(NSDictionary*)loginData{
NSLog(@"%@",loginData);
}
現在、私の LoginService は NSURLConnection のデリゲートでもあります。デリゲート メソッド connectionDidFinishLoading が呼び出されると、フェッチされたデータは JSON を使用して NSDictionary に変換され、loginResult に渡されます。LoginService では問題なく動作し、フェッチされたデータはログに記録されています。
今私の問題は、たとえば、取得したデータの値をViewController.mからログインボタンの下のラベルに設定しようとしていることです。これは、LoginService デリゲートを介してデータを正常に取得できるかどうかを試すためのものです。問題は、私ができないことです。ViewController はすでに LoginService のデリゲートになっています。viewDidLoad メソッドと、ログイン ボタンが押されたときに呼び出される loginWithUserName メソッドの両方で試しました。
ViewController.m の viewDidLoad メソッドに次のコードがあります。
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
LoginService *ls = [[LoginService alloc]init];
ls.delegate=self;
[ls loginResult];
}
最初に、ラベルのテキストをログイン結果に設定しようとしましたが、失敗していたので、ViewController.m で LoginService デリゲート メソッドが呼び出されるかどうかを確認するためだけに、次のコードを用意しました。
- (void)loginResult:(NSDictionary *)loginData{
NSLog(@"reached");
}
これは非常に基本的な問題かもしれませんが、私は iOS プログラミングに非常に慣れていないため、非常に混乱しています。誰かが私を助けてくれることを本当に願っています。