2010-08-28 4 views
0

Я хочу отобразить некоторые данные в таблице, назовем его «TabeView».iPhone - вопрос UINavigationController

Итак, я создал приложение на основе навигации на XCode, и оно дает мне 4 файла в «папке классов».

  • RootViewController.h
  • RootViewController.m
  • TableViewAppDelegate.h
  • TableViewAppDelegate.m

Теперь я хотел бы настроить данные в TableViewAppDelegate с использованием "didFinishLaunchingWithOptions" метод , который я использовал с помощью массива.

Затем мне нужно «отправить» этот массив в RootViewController. У меня есть переменная массива в RootViewController, поэтому я предполагаю, что мне нужно «установить» переменную массива в RootViewController из TableViewAppDelegate. Как я могу это сделать?

Проблема, с которой я столкнулась, заключается в том, что я не знаю, как установить переменную массива в RootViewController из TableViewAppDelegate. Я хочу знать, если что-то вроде ниже можно

.... 
[RootViewController setMyArray:myArray]; 
[window addSubview:navigationController.view]; 
[window makeKeyAndVisible]; 
.... 

Но я понятия не имею, как назвать «RootViewController».

Надеюсь, у меня есть смысл. Спасибо.

+0

Почему бы просто не настроить массив в RootViewController? – Felixs

+0

Я мог бы. Но прежде чем дойти до этого, можете ли вы сказать мне, возможно ли то, что я пытаюсь сделать? И если нет, то почему? :) – ericbae

+0

Не все это точно, как тэг [google-app-engine] нашел свой путь к этому вопросу. Соответственно. – BoltClock

ответ

0

Во-первых, создать свойство в классе RootViewController для переменной массива. Так, например, если ваша переменная массив называется туАггау ваш код может выглядеть примерно так:

В RootViewController.h:

#import <UIKit/UIKit.h> 

@interface RootViewController : UITableViewController { 
    NSArray *myArray; 
} 

@property (nonatomic, retain) NSArray *myArray; 

@end 

и добавьте соответствующую строку в @synthesize RootViewController.m:

#import "RootViewController.h" 

@implementation RootViewController 

@synthesize myArray; 

// methods here 

@end 

Теперь вы можете установить член myArray объекта RootViewController следующим образом:

myRootViewController.myArray = [NSArray arrayWithObjects:@"foo", @"bar", nil]; 

Теперь в классе делегата приложения вы можете использовать свойство viewControllers self.navigationController для возврата контроллеров представления в стек навигационной панели. Корневой контроллер всегда будет иметь индекс 0. viewControllers возвратит NSArray, элементы которого имеют тип NSObject, поэтому вам нужно также направить указатель RootViewController. Здесь в две строках, чтобы сделать бросок явным:

// get a pointer to the root view controller 
id obj = [self.navigationController.viewControllers objectAtIndex:0]; 

// cast it to a RootViewController pointer 
RootViewController* rvc = (RootViewController*)obj; 

// Now you can set the array 
rvc.myArray = someArray; 

(Для того, чтобы использовать имя класса RootViewController в вашем приложении класса делегата вам необходимо импортировать соответствующий файл заголовок - это поместить в верхнем TableViewAppDelegate.м:

#import "RootViewController.h" 

И все!

p.s. Имейте в виду, что объявление вашего свойства myArray как типа (неатомное, сохранение) означает, что ваш объект RootViewController в конечном итоге укажет на тот же экземпляр NSArray, который вы передадите ему. Так, например:

NSMutableArray *array = [NSMutableArray arrayWithObjects: @"foo", @"bar", nil]; 
myRootViewController.myArray = array; 

[array removeAllObjects]; // myRootViewController.myArray is now empty! 

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

+0

вы чемпион Симон У. :) спасибо. – ericbae

+0

Ха-ха - приветствую! Рад, что это помогло. :) –

0

navigationController.myArray = myArray;

перед тем

[window addSubview:navigationController.view];

+0

это не работает. Я получаю «запрос для члена myarray в чем-то, что не является структурой или объединением. Из того, что я понимаю, я не пытаюсь получить доступ к переменной в NavigationController, но мне нужно получить доступ к RootViewController. Они разные объекты? – ericbae

+0

контроллер навигации должен иметь экземпляр rootViewController в нем (вы 'initWithRootViewController: RootViewController' и должны работать - я сделал это раньше, пропустив строку ...:/hmm. Если сообщение @simon whitaker не работает, вы можете положить все ваш делегат приложения, пожалуйста? –

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