iPhone - вопрос UINavigationController - PullRequest
       3

iPhone - вопрос UINavigationController

0 голосов
/ 28 августа 2010

Я хочу отобразить некоторые данные в таблице, назовем это приложением «TabeView».

Итак, я создал «навигационное» приложение на 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».

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

Ответы [ 2 ]

0 голосов
/ 28 августа 2010

Сначала создайте свойство в вашем классе RootViewController для переменной массива.Например, если переменная вашего массива называется myArray, ваш код может выглядеть примерно так:

В 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.m:

#import "RootViewController.h"

И это все!

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

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

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

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

0 голосов
/ 28 августа 2010

navigationController.myArray = myArray;

до

[window addSubview:navigationController.view];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...