首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从模型访问控制器

从模型访问控制器
EN

Stack Overflow用户
提问于 2011-08-17 13:41:12
回答 2查看 115关注 0票数 0

我有以下的课程设计:

  • A控制器类和模型类都是从NSobject继承的;
  • A UI有来自控制器的IBoutlets;
  • 是一个模型类,它扫描一组文件的属性并写入文件(使用循环);UI必须显示正在扫描的当前文件的名称。

如何使模型类与控制器通信?

我在控制器内创建了一个模型的对象,因此为了避免循环,我不能在模型类中创建控制器的实例。对如何实施这一点有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2011-08-17 14:07:05

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

代码语言:javascript
复制
@protocol FileScannerDelegate
@required
    - (void)fileScanner:(FileScannerClass *)fileScanner willScanFile:(NSString *);
@end

添加一个新属性,即assign,以保存对委托的引用。这需要分配以避免循环引用。

代码语言:javascript
复制
@property (nonatomic, assign) id<FileScannerDelegate> delegate;

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

代码语言:javascript
复制
[delegate fileScanner:self willScanFile:fileName];

在控制器的.h中,您需要说您遵循了协议

代码语言:javascript
复制
@interface MyController : UIViewController <FileScannerDelegate> 

在控制器.m中。在控制器中实例化文件扫描器时,需要将控制器设置为委托。

代码语言:javascript
复制
fileScanner = [[FileScannerClass alloc] init];
fileScanner.delegate = self;

然后实现您说过的方法

代码语言:javascript
复制
- (void)fileScanner:(FileScannerClass *)fileScanner willScanFile:(NSString *)
{
   ...
   // update the UI
} 
票数 2
EN

Stack Overflow用户

发布于 2011-08-17 15:42:44

向模型提供对控制器的引用。

代码语言:javascript
复制
@class MyController

@interface MyModel:NSObject

@property (readwrite,assign) MyController *controller;

@end

和实施

代码语言:javascript
复制
#include "MyController.h"    

@implementation MyModel

@synthesize controller;

-(void)somethingHappenedToMe
 {
      [controller updateYourself:self];
 }


@end

您可以使用委托和私有方法抽象自己,但在一天结束时,您仍然希望您的模型实例与您的控制器实例对话。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7093842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档