gpt4 book ai didi

objective-c - 从模型访问 Controller

转载 作者:行者123 更新时间:2023-12-03 17:42:57 24 4
gpt4 key购买 nike

我有以下类(class)设计:

  • Controller 类和模型类均继承自 NSobject;

  • 具有来自 Controller 的 IBoutlet 的 UI;

  • 一个模型类,它扫描一组文件的属性并写入文件(使用循环);

  • UI 必须显示当前正在扫描的文件的名称。

如何使模型类与 Controller 通信?

我已经在 Controller 内创建了模型的对象,因此为了避免循环,我无法在模型类内创建 Controller 的实例。关于如何实现这一点有什么建议吗?

最佳答案

在模型的 .h 中定义一个协议(protocol),如下所示:

@protocol FileScannerDelegate
@required
- (void)fileScanner:(FileScannerClass *)fileScanner willScanFile:(NSString *);
@end

添加一个新属性,即分配以保存对委托(delegate)的引用。需要对其进行分配以避免循环引用

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

在模型 .m 中,您正在扫描调用的下一个文件的位置

[delegate fileScanner:self willScanFile:fileName];

在 Controller 的 .h 中,您需要说明您遵循协议(protocol)

@interface MyController : UIViewController <FileScannerDelegate> 

在 Controller .m中。当您在 Controller 中实例化文件扫描器时,您需要将 Controller 设置为委托(delegate)

fileScanner = [[FileScannerClass alloc] init];
fileScanner.delegate = self;

然后实现你说的方法

- (void)fileScanner:(FileScannerClass *)fileScanner willScanFile:(NSString *)
{
...
// update the UI
}

关于objective-c - 从模型访问 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7093842/

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