我有以下的课程设计:
如何使模型类与控制器通信?
我在控制器内创建了一个模型的对象,因此为了避免循环,我不能在模型类中创建控制器的实例。对如何实施这一点有什么建议吗?
发布于 2011-08-17 14:07:05
在模型的.h中定义一个协议,如下所示:
@protocol FileScannerDelegate
@required
- (void)fileScanner:(FileScannerClass *)fileScanner willScanFile:(NSString *);
@end添加一个新属性,即assign,以保存对委托的引用。这需要分配以避免循环引用。
@property (nonatomic, assign) id<FileScannerDelegate> delegate;在模型.m中,在扫描所调用的下一个文件的位置
[delegate fileScanner:self willScanFile:fileName];在控制器的.h中,您需要说您遵循了协议
@interface MyController : UIViewController <FileScannerDelegate> 在控制器.m中。在控制器中实例化文件扫描器时,需要将控制器设置为委托。
fileScanner = [[FileScannerClass alloc] init];
fileScanner.delegate = self;然后实现您说过的方法
- (void)fileScanner:(FileScannerClass *)fileScanner willScanFile:(NSString *)
{
...
// update the UI
} 发布于 2011-08-17 15:42:44
向模型提供对控制器的引用。
@class MyController
@interface MyModel:NSObject
@property (readwrite,assign) MyController *controller;
@end和实施
#include "MyController.h"
@implementation MyModel
@synthesize controller;
-(void)somethingHappenedToMe
{
[controller updateYourself:self];
}
@end您可以使用委托和私有方法抽象自己,但在一天结束时,您仍然希望您的模型实例与您的控制器实例对话。
https://stackoverflow.com/questions/7093842
复制相似问题