【发布时间】:2010-10-27 22:04:51
【问题描述】:
我正在为 iPhone 开发,我有一个类 DataManager,用于维护我的应用程序数据。当应用程序启动/退出时,数据会从磁盘读取/写入磁盘以创建此类的实例,使用 NSKeyedArchiver(和 Unarchiver)类,因为 DataManager 遵循 NSCoding 协议。
我遇到的一个问题是我需要 DataManager 可以被我的许多其他 IB 类访问,因此它被定义为 IB 中的一个对象,并且这些类有一个出口。 DataManager 是使用标准的 init: 方法(或者可能是 initWithCoder:?)创建的,但由于 IB 没有正确的文件(或文件中的 NSData)来实例化对象,因此它没有初始内容。
那么,有没有办法告诉 IB不 自动实例化该类?这将改为使用我的应用程序委托执行,例如:
AppDelegate.h
IBOutlet DataContext *context;
AppDelegate.m
context = [NSKeyedUnarchiver unarchiveObjectWithData:dataLoadedFromFile];
如您所见,这带来了一个问题。上下文不会被实例化两次,一次由 InterfaceBuilder 实例化,然后由我的应用程序委托第二次实例化?
我想防止在委托中将上下文维护为 ivar,因为这似乎偏离了 MVC 范式,而是倾向于单例模式。 (控制器不应该对我脑海中的数据负责。它显然可以维护对它的引用,但不应该负责将它提供给其他类。)
【问题讨论】:
标签: objective-c cocoa cocoa-touch xcode model-view-controller