Một tùy chọn bạn có là khai báo mô hình ngày của bạn dưới dạng biến mẫu của đại biểu ứng dụng của bạn (như được đề cập bởi những người nhận xét khác).
Thay vì tham chiếu ứng dụng đại biểu theo đề xuất của nevan, thay thế là thêm thuộc tính vào các lớp trình điều khiển chế độ xem (A và B) cho mô hình dữ liệu của bạn.
Giả sử bạn muốn chia sẻ một đối tượng mô hình dữ liệu giữa các bộ điều khiển xem của bạn, bạn có thể thêm một tài sản với nhau:
@interface AViewController : UIViewController {
MyDataModel *model;
}
@property (nonatomic, retain) MyDataModel *model;
@end
@interface BViewController : UIViewController {
MyDataModel *model;
}
@property (nonatomic, retain) MyDataModel *model;
@end
Khi bạn khởi khiển tầm nhìn của bạn sau đó bạn có thể thiết lập thuộc tính này với bối cảnh đối tượng được khởi tạo trước đó .
Bạn đã đề cập đến bộ điều khiển thanh tab. Nếu bộ điều khiển xem của bạn đang có dây thông qua IB tất cả các bạn phải làm là để thiết lập các thông số trong phương pháp ứng dụng đại biểu applicationDidFinishLaunching:
của bạn, trước khi điều khiển thanh tab được hiển thị:
@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];
}
Đừng quên để phát hành các mô hình trong bạn xem phương pháp dealloc
của bộ điều khiển.
Cách khác là sử dụng đối tượng đơn lẻ. Một ví dụ đơn giản singleton:
@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
Bạn có thể truy cập vào mô hình dữ liệu này từ tất cả các bộ điều khiển xem của bạn với một cái gì đó tương tự như sau:
MyDataModel *model = [MyDataModel sharedDataModel];
Xem thêm this chồng thảo luận tràn về độc thân.
Câu hỏi này rất giống với một câu hỏi mà tôi hỏi: http://stackoverflow.com/questions/1053704/organizing -instance-variables-in-a-view-hierarchy – titaniumdecoy
Đúng. Bạn không thể đổ lỗi cho tôi vì không tìm thấy nó mặc dù. Nó được diễn đạt hoàn toàn khác. –