您的一种选择是将日期模型声明为应用程序委托的实例变量(正如其他评论者所提到的)。
除了按照 nevan 建议引用应用程序委托之外,另一种方法是将属性添加到数据模型的视图控制器类(A 和 B)中。
假设您想在视图控制器之间共享数据模型对象,您可以为每个视图控制器添加一个属性:
@interface AViewController : UIViewController {
MyDataModel *model;
}
@property (nonatomic, retain) MyDataModel *model;
@end
@interface BViewController : UIViewController {
MyDataModel *model;
}
@property (nonatomic, retain) MyDataModel *model;
@end
当您初始化视图控制器时,您可以将此属性设置为之前初始化的对象上下文。
您提到了标签栏控制器。如果您的视图控制器通过 IB 连接,您所要做的就是在应用程序委托中设置这些参数applicationDidFinishLaunching:
方法,在显示标签栏控制器之前:
@interface MyAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate>
{
MyDataModel *model;
AViewController *aViewController;
BViewController *bViewController;
...
}
@property (retain) IBOutlet AViewController *aViewController;
@property (retain) IBOutlet BViewController *aViewController;
@end
@implementation MyAppDelegate
...
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
...
aViewController.model = model;
bViewController.model = model;
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];
}
不要忘记在视图控制器中释放模型dealloc
method.
另一种方法是使用单例对象。一个简单的单例示例:
@interface MyDataModel : NSObject
{
}
+ (MyDataModel *) sharedDataModel;
@end
@implementation MyDataModel
static MyDataModel *sharedDataModel = nil;
+ (MyDataModel *) sharedDataModel
{
@synchronized(self)
{
if (sharedDataModel == nil)
{
sharedDataModel = [[MyDataModel alloc] init];
}
}
return sharedDataModel;
}
@end
您可以使用类似于以下内容的方式从所有视图控制器访问此数据模型:
MyDataModel *model = [MyDataModel sharedDataModel];
也可以看看this https://stackoverflow.com/questions/145154/what-does-your-objective-c-singleton-look-like关于单例的堆栈溢出讨论。