Как разделить переменную между несколькими представлениями / XIB - PullRequest
0 голосов
/ 19 января 2012

Я прочитал несколько похожих тем, но не могу понять это - извините.У меня есть проект с несколькими представлениями, включая ViewController, несколько представлений «sub» и NavigationController.Я хотел бы иметь массив, доступный из любого из представлений, чтобы я мог заполнить TableView или TextField и т. Д. Я бы хотел, чтобы массив был модифицируемым из любого представления, которое может получить к нему доступ.

Сейчас у меня есть это в файле xxAppDelegate.h:

NSMutableArray *listOfHeadings;
@property (strong,nonatomic) NSMutableArray *listOfHeadings;

А в файле xxAppDelegate.m я заполняю массив:

listOfHeadings = [[NSMutableArray alloc] init];
[listOfHeadings addObject:@"Heading 0"];
[listOfHeadings addObject:@"Heading 1"];

Но я не могупохоже, доступ к массиву из других файлов .m.Как мне сделать это правильно?

Ответы [ 3 ]

1 голос
/ 19 января 2012

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

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

1 голос
/ 19 января 2012

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

#import "xxAppDelegate.h"
//...
NSMutableArray *array
= [(xxAppDelegate *)[[UIApplication sharedApplication] delegate] listOfHeadings];
0 голосов
/ 19 января 2012

Имея текущий дизайн, вы можете получить доступ к указателю AppDelegate, используя:

AppDelegate *dPtr = (AppDelegate *)[[UIApplication sharedApplication] delegate];

Затем вы можете получить доступ к вашему массиву, используя свойство:

[dPtr.your_array objectAtIndex:i];

Но яочень рекомендую использовать шаблон проектирования Singleton для управления глобальными объектами.

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