如何从容器/父视图控制器和多个子视图控制器共享数据数组

时间:2013-02-21 16:49:47

标签: ios objective-c uiviewcontroller

我有一个场景,其中有一个父容器视图控制器,子视图占据了大部分屏幕。此子视图用于交换相同数据的3个不同视图(地图,表格和图库)。有一个分段控件,用于选择用户想要查看的数据视图。我在父容器视图控制器中有我的模型类型的数组集合,我希望这3个不同的子视图控制器在各自的视图中显示这些数据。是否有任何干净的方法来做到这一点,而不必复制数据4次(一次在父母和3x在孩子)?我假设我将不得不复制数据,因为孩子不应该调用父视图控制器来访问它的数组。它也不是一个合适的继承情况,因为父类比同一类型的视图控制器更像是一个容器。这也不是代表情况,因为孩子们不需要通知父母任何事情,反之亦然。

任何建议都非常感谢。

感谢。

2 个答案:

答案 0 :(得分:4)

我会创建一个类(下面的MyDataController)来管理数据,并使用共享实例从我的应用程序中的任何位置访问它。

interface(MyDataController.h)

@interface MyDataController : NSObject {
   NSMutableArray *myData; // this would be the collection that you need to share
}
+ (MyDataController*)sharedDataController;
// ... add functions here to read / write your data
@end

实现(MyDataController.m)

static MyDataController* sharedDataController; // this will be unique and contain your data

@implementation MyDataController

+ (MyDataController*)sharedDataController
{
    if (!sharedDataController)
        sharedDataController = [[[MyDataController alloc] init] autorelease]; // no autorelease if ARC
    return sharedDataController;
}

// ... implement your functions to read/write data
@end

最后,要从任何地方访问此静态对象:

MyDataController *dataController = [MyDataController sharedDataController]; // this will create or return the existing controller;

答案 1 :(得分:0)

您可以将数据放在单例类中,让每个子视图控制器从单例中获取数据。