gpt4 book ai didi

ios - 单击按钮时从另一个类返回 NSDictionary

转载 作者:行者123 更新时间:2023-11-28 20:12:21 25 4
gpt4 key购买 nike

我有一个关于在 iOS/Objective-C 中传递数据的问题。我刚开始创建一个连接网站并从网站获取数据的应用程序,但现在我遇到了问题。

我的默认和 Root View Controller 称为 ViewController。它具有基本的登录 UI View :2 个文本字段和一个按钮。

单击/触摸按钮时,ViewController 调用另一个名为 LoginService 的类的方法。现在 LoginService 处理与网站的连接。我连接到网站并从中获取数据没有问题,但是我无法将获取的数据(现在作为 NSDictionary 处理)返回到 ViewController

我尝试的第一件事是在 ViewController 中创建一个 setter 方法,该方法将实例变量 userProfile 设置为传递给它的 NSDictionary。然而,它失败了。我尝试在 LoginService 的 NSURLConnectionDataDelegate 方法 connectionDidFinishLoading 中使用它。

这可能是个愚蠢的问题,但我不知道如何在单击按钮后将获取的 NSDictionary 从 LoginService 传递到 ViewController。我需要 block 、队列或其他东西吗?我的意思是,例如,我需要在我的登录按钮下方设置一个标签为登录用户的名称。我该如何执行此操作?

希望有人能帮助我。我将不胜感激。

最佳答案

由于 danh 已经解释了执行此操作的 block 模式,我将尝试解释委托(delegate)模式。完成这项工作的步骤:

LoginService.h

像这样在您的 LoginService 中创建一个协议(protocol)定义:

    @protocol LoginServiceDelegate

-(void)applicationLoggedIn:(NSMutableDictionary*) responseData;

@end

现在添加一个持有这个委托(delegate)的成员指针并为此添加一个属性

    @interface LoginService {

id<LoginServiceDelegate>delegate;
}
@property (nonatomic, assign) id <LoginServiceDelegate> delegate;

LoginService.m

connectionDidFinishLoading 中获得登录响应后,只需像下面这样调用委托(delegate)方法:

    if ([delegate respondsToSelector:@selector(applicationLoggedIn:)]) {
[delegate applicationLoggedIn:responseDict];
}

LoginViewController.h

现在要在您的 LoginViewController 中使用它,您需要实现此协议(protocol)

    #import "LoginService.h"
@interface LoginViewController<LoginServiceDelegate>

LoginViewController.m

将LoginService的代理赋值给LoginViewController

    LoginService* loginService = [[LoginService alloc]init];
loginService.delegate = self;

将协议(protocol)方法实现为:

    -(void)applicationLoggedIn:(NSDictionary*)response{

}

希望这对您有所帮助。

关于ios - 单击按钮时从另一个类返回 NSDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19695607/

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