2009-10-30 6 views
0

Ceci est lié à une question que j'ai posée précédemment, mais la question d'origine a été résolue. J'espère que vous pouvez ouvrir une nouvelle question, sinon, n'hésitez pas à la supprimer. J'essaie de construire une application iPhone simple en utilisant tablesviews et une barre d'onglets. Chaque vue est la même par programmation, sauf pour le titre et le type de données qui doit être affiché. Sauf pour cela, ils se comportent tous de la même manière.Passage d'un NSDictionary à un ViewController depuis AppDelegate

Actuellement le code dans mon AppDelegate gère la distribution des viewcontrollers aux différents onglets et définit le titre en conséquence. Ce que je ne peux pas comprendre cependant, est comment passer un tableau spécifique d'objets (chaque tableau diffère par tabulation) à chaque viewcontroller distribué afin qu'il soit utilisé par la tableview.

J'espère que vous pouvez m'aider. Mon code suit ci-dessous:

AppDelegate.h

#import <UIKit/UIKit.h> 

@interface MyAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> { 
    UIWindow *window; 
    UITabBarController *tabBarController; 
} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController; 

@end 

AppDelegate.m

#import "RootViewController.h" 
#import "MyAppDelegate.h" 

@implementation MyAppDelegate.h 

@synthesize window, tabBarController; 

- (void)applicationDidFinishLaunching:(UIApplication *)application { 
    NSDictionary *row1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"1", @"Id", 
        @"My Name", @"Name", 
        @"My Type", @"Type", 
        @"My Meta", @"Meta", 
        @"My Excerpt Text", @"Excerpt", 
        @"My Body Text", @"Body", 
        @"icon.jpg", @"Icon", 
        @"image.jpg", @"Image", nil]; 

    NSArray *array = [[NSArray alloc] initWithObjects:row1, nil]; 
    self.events = array; 

    NSArray *tableControllersConfig = [NSArray arrayWithObjects: 
           [NSDictionary dictionaryWithObjectsAndKeys:@"test1", @"DataSource", @"Title of the Tableview", @"Title", @"icon.png", @"Icon", nil], 

    NSMutableArray *tableControllers = [NSMutableArray array]; 
    for (NSDictionary *configDict in tableControllersConfig) { 
    RootViewController *controller = [[RootViewController alloc] initWithNibName:@"TableView" bundle:nil]; 
    controller.tableView.delegate = controller; 
    controller.title = [configDict valueForKey:@"Title"]; 
    controller.tabBarItem.image = [UIImage imageNamed: [configDict valueForKey:@"Icon"]]; 
    [tableControllers addObject:controller]; 
    [controller release]; 
    } 

    self.tabBarController.viewControllers = [NSArray arrayWithArray:tableControllers]; 
    [window addSubview:tabBarController.view]; 
    [row1 release]; 
    [array release]; 
} 

- (void)dealloc { 
    [tabBarController release]; 
    [window release]; 
    [super dealloc]; 
} 
@end 

Le RootViewController implémente le protocole UITableViewDataSource.

Répondre

1

Si votre "RootViewController" est la source de données du tableView (implémente le protocole UITableViewDataSource)

Créer un Ivar NSArray dans la RootViewController classe dit "tableDataArray",

Créer une nouvelle méthode init qui comprendra une tableau à retenir dans cette Ivar:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil tableDataSource:(NSArray*)tableData { 
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { 
    // Custom initialization 
    tableDataArray = [tableData retain]; 

} 
return self; 

}

Utilisez le tableDataArray dans le tableView méthodes de source de données.

Ensuite, lorsque vous créez RootViewController dans votre boucle, vous pouvez définir la tableDataData avec la nouvelle méthode init, et vous pouvez avoir chacune des vues de la table remplie avec un tableau différent.

espérons que cela aide

0

La réponse dépend de votre conception.

Si les données dont vous parlez restent les mêmes d'une exécution à l'autre, vous devez les stocker dans le contrôleur de vue, car elles font partie de la configuration de base des vues de table. Si les données évoluent au fil du temps, vous devez les placer dans le délégué de l'application, puis utiliser une sous-classe de contrôleur de vue personnalisée qui a un pointeur vers ces données. Regardez l'un des projets modèles dans Xcode qui utilisent des données de base. La relation entre les classes est la même que celle dont vous avez besoin, mais vous utiliseriez un tableau au lieu d'un contexte d'objet géré.

Questions connexes