2013-02-21 1 views
2

J'ai un scénario dans lequel un contrôleur de vue de conteneur parent avec une sous-vue occupe la plus grande partie de l'écran. Cette sous-vue est utilisée pour échanger 3 vues différentes des mêmes données (une carte, une table et une galerie). Un contrôle segmenté est utilisé pour sélectionner la vue des données que l'utilisateur souhaite afficher. J'ai une collection de tableau de mon type de modèle dans le contrôleur de vue conteneur parent et j'aimerais que ces 3 contrôleurs de vue enfants différents affichent chacun ces données dans leurs vues respectives. Existe-t-il un moyen propre de faire cela sans avoir à dupliquer les données 4 fois (une fois dans le parent et 3 fois dans les enfants)? Je suppose que je devrais dupliquer les données, parce que l'enfant ne devrait pas être en mesure d'appeler le contrôleur de vue parent pour accéder à son tableau. Ce n'est pas non plus une situation d'héritage appropriée, puisque le parent est plus un conteneur que le même type de contrôleur de vue. Ce n'est pas non plus une situation de délégué, parce que les enfants n'ont pas besoin d'informer le parent de quoi que ce soit, mais l'inverse.Comment partager une matrice de données depuis le contrôleur de conteneur/parent et plusieurs contrôleurs de vue enfants

Toutes les suggestions grandement appréciées.

Merci.

+0

Eh bien, vous devez l'obtenir en quelque sorte ... Créer une propriété sur chaque sous-vue? Utilisez le modèle de source de données similaire à UITableView? – onnoweb

Répondre

4

Je voudrais créer une classe (MyDataController ci-dessous) pour gérer les données, et utiliser une instance partagée pour y accéder à partir de n'importe où dans mon application.

Interface

(de 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 

mise en œuvre (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 

Enfin, pour accéder à cet objet statique où que vous soyez:

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

Merci, c'est une bonne approche. – fogwolf

0

Vous pouvez mettre les données dans une classe singleton et ont juste chacun de vos contrôleurs de vue enfant obtenir les données de la s Ingleton.

+0

Merci, c'est ce que je pense que je vais faire - réponse similaire donnée par quelqu'un juste avant vous. – fogwolf

Questions connexes