gpt4 book ai didi

ios - iOS 中未调用自定义委托(delegate)方法

转载 作者:可可西里 更新时间:2023-11-01 06:24:47 24 4
gpt4 key购买 nike

我在从我的 iOS 应用程序中的 Web 服务获取数据时遇到问题。我有一个名为 LoginService 的 NSObject 类。当用户单击“登录”时,从 ViewController 调用 LoginService 的 loginWithUsername 方法。

在我的 LoginService 中,我创建了一个名为 LoginServiceDelegate 的委托(delegate)。以下是 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 的委托(delegate)。当委托(delegate)方法 connectionDidFinishLoading 被调用时,获取的数据然后使用 JSON 转换为 NSDictionary 并传递给 loginResult。它适用于 LoginService,正在记录获取的数据。

现在我的问题是我正在尝试将获取的数据的值设置为来自 ViewController.m 的登录按钮下的标签。这只是为了尝试我是否可以通过 LoginService 委托(delegate)成功获取数据。问题是,我做不到。 ViewController 已经成为 LoginService 的委托(delegate)。我在 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 委托(delegate)方法:

- (void)loginResult:(NSDictionary *)loginData{
NSLog(@"reached");
}

这可能是一个非常基本的问题,但我是 iOS 编程的新手,这让我很困惑。我真的希望有人能帮助我。

最佳答案

我觉得你漏掉了什么。你的声明是完美的,但你的电话是不正确的。它应该如下..

View Controller

- (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 login];

}

- (void)loginResult:(NSDictionary *)loginData{
NSLog(@"reached");
}

登录服务

//You are missing this part
-(void)login{

if([self.delegate respondsToSelector:@selector(loginResult:)]){
[self.delegate loginResult:YOUR_RESULT_DICTIONARY]
}

}

解释

这就像您将消息转发到您已设置委托(delegate)方法的类,因为发生了某些操作,在您的情况下,您正在从处理所有登录/api 连接的 LoginService 类登录,并在登录后您想将消息发送到您已设置委托(delegate)方法的 ViewController,我确保您设置委托(delegate)的位置包含该方法,不会崩溃。

希望对你有帮助。

关于ios - iOS 中未调用自定义委托(delegate)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19864041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com