我在从 iOS 应用程序中的 Web 服务获取数据时遇到问题。我有一个名为 LoginService 的 NSObject 类。当用户单击 Login 时,从 ViewController 调用 LoginService 的 loginWithUsername 方法。
在我的 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 编程非常陌生,这让我很困惑。我真的希望有人能帮助我。