2009-10-30 6 views
0

Это связано с вопросом, который я задал ранее, но на исходный вопрос был дан ответ. Надеюсь, что можно открыть новый вопрос, если нет, не стесняйтесь его удалять.Передача NSDictionary в ViewController из AppDelegate

Я пытаюсь создать простое приложение iPhone, используя таблицы и вкладку. Каждое представление одинаково программно, за исключением названия и вида данных, которые необходимо отобразить. Кроме того, все они ведут себя одинаково.

В настоящее время код в приложении AppDelegate обрабатывает распределение контроллеров view на разных вкладках и соответственно устанавливает заголовок. Однако я не могу понять, как передать определенный массив объектов (каждый массив отличается на каждую вкладку) каждому распределенному диспетчеру просмотра, чтобы он использовался табличным представлением.

Надеюсь, вы можете мне помочь. Мой код следует ниже:

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 

RootViewController реализует протокол UITableViewDataSource.

ответ

1

Если ваш «RootViewController» является источник данных в Tableview (в реализует протокол UITableViewDataSource)

Создать Ивар NSArray в RootViewController классе говорят «tableDataArray»,

Создать новую инициализацию метод, который будет включать в себя массив, который будет сохранен в этом Ивар:

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

} 
return self; 

}

Используйте tableDataArray в Tableview методы источников данных.

Затем, когда вы создаете RootViewController в своем цикле, вы можете установить tableDataArray с помощью нового метода init, и вы можете иметь каждый вид таблицы, заполненный другим массивом.

надеюсь, что это поможет

0

Ответ зависит от вашего дизайна.

Если данные, которые вы говорите, остаются неизменными от запуска до запуска, вы должны припарковать эти данные в контроллере представления, потому что это часть базовой конфигурации табличных представлений.

Если данные меняются сверхурочно, вы должны поместить их в делегат приложения, а затем использовать специальный подкласс диспетчера представлений, который имеет указатель на эти данные. Посмотрите на один из проектов шаблонов в Xcode, которые используют основные данные. Связь между классами та же, что и вам, но вы должны использовать массив вместо контекста управляемого объекта.

Смежные вопросы