Отправить NSMutableArray в UIViewController - PullRequest
2 голосов
/ 05 июля 2011

Мне нужна помощь, потому что я пытаюсь найти хороший способ разместить NSMutableArray в другом классе.

Итак, у меня есть UIViewController с NSMutableArray (который выдвигается, если пользователь выбирает ячейку из RootViewController)

например.

Код в RootViewController, когда пользователь выбирает ячейку:

QueryTableViewController *queryTableView 
        = [[QueryTableViewController alloc] initWithQuery:query];
[self.navigationController pushViewController:queryTableView animated:YES];
[queryTableView release];

Код в QueryTableViewController

@interface QueryTableViewController : UIViewController{
NSMutableArray *results;
}

@implementation QueryTableViewController // more code
-(int)fetchQueryWithString:(NSString*)string{
    // Searching twitter.
    // add objects in the results array.
    // **HERE** Once I gather all the objects I am posting a notification:
}

С другой стороны у меня есть DetailViewController, который пуст и нуждается в массиве для создания другого UIViewController и добавления подпредставления. например,

 // when the notification is received  
 self.statsTableView = [[StatsTableVC alloc] initWithTweets:**HERE**];   
 [self addSubView:self.statsTableView];

В данный момент я отправляю уведомление в конце метода fetchQueryWithString для совместного использования массива. Я хотел бы знать, есть ли лучший способ отправить его другому UIViewController?

(что, я уверен, есть;)

Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 27 декабря 2013

импортируйте файл appdelegate .h, в каком классе вы хотите использовать массив nsmutuable.затем свойство определяет в массиве nsmutable в классе appdelegate.

тогда какой класс вы хотите использовать массив.

    [yourappdelegateclass sharedinstance].appdelegatearray = yourarray;
0 голосов
/ 05 июля 2011

В следующих шагах используется массив в классе on, B, который был создан в другом классе, A.

В файле реализации класса A, выше @implementation, объявите массив следующим образом:

NSArray *array;
@implementation

... в вашем методе, где вы заполнили NSMutableArray, присвойте этот массив непостоянному массиву, например:

array = arrMutable;

Теперь в вашем классе B выше @implementation extern это похоже на

extern NSArray *array;
@implementation

Теперь у вас есть все элементы в вашем массиве, который был в массиве nsmutable

Надеюсь, это поможет ...........

0 голосов
/ 05 июля 2011

Существует два метода обработки данных между несколькими контроллерами представления.

Во-первых, существует внедрение зависимостей , которое просто передает ссылку на объект хранения данных между контроллерами.Поскольку объекты передаются по ссылке, вы можете изменить объект данных в одной руке контроллера, если данные появятся в другой.

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

QueryTableViewController *queryTableView 
        = [[QueryTableViewController alloc] initWithQuery:query];
queryTableView.results=self.queryResults;
[self.navigationController pushViewController:queryTableView animated:YES];
[queryTableView release];

Поскольку экземпляр RootViewController и экземпляр QueryTableViewController совместно используют ссылку на один и тот же изменяемый массив, каждый из которых является доступом к изменениям, внесенным другим.

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

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

Чтобы получить делегирование приложения в любом месте приложения:

AppDelegateClassName *appDelegate=(AppDelegateClassName *)[[NSApplication sharedApplication]  delegate]; 

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

NSMutableArray *localResults=appDelegate.results;

Преимущество этой системы в том, что она делает контроллеры представления независимыми друг от друга.Вы можете легко перемещать их или даже перемещать в другое приложение.

0 голосов
/ 05 июля 2011

вы можете сделать свой array доступным через singleton class , если он доступен для нескольких классов в вашем приложении.

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

...