Как создать NSMutable Array, к которому можно получить доступ из разных контроллеров представления

Я новичок в разработке iphone, я хочу создать изменяемый массив, который может доступ и заполнение из разных контроллеров представления. Как мне это сделать? Если можно, дайте пример кода


person smartsanja    schedule 28.08.2011    source источник


Ответы (3)


В большинстве случаев не нужно и не полезно использовать глобальные переменные. Если вам нужно их использовать, самый простой способ — поместить массив в ваш AppDelegate.

Вы можете получить доступ к массиву (имя массива в AppDelegate здесь) с помощью:

YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];

NSArray *aArray= [appDelegate array];
person Amandir    schedule 28.08.2011
comment
большое спасибо за помощь, я могу решить это так myAppDelegate *appDelegate = (myAppDelegate *) [[UIApplication sharedApplication] делегат]; // заполняем массив appDelegate [appDelegate.arrSelectedanswers insertObject:strSelectedAnswer atIndex:0]; - person smartsanja; 28.08.2011

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

В вашем случае у вас есть простой набор общих данных — изменяемый массив.

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

Таким образом, несколько контроллеров будут делать.

MyModel *model = [MyModel sharedInstance];

Тогда оба контроллера могут работать на нем.

Вот хорошая статья на эту тему: http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html

синглтон от Apple: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW32

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

person bryanmac    schedule 28.08.2011
comment
Большое спасибо за помощь, я могу решить эту проблему, используя делегат приложения. Я объявляю массив в своем классе делегата и заполняю его из другого контроллера представления. - person smartsanja; 28.08.2011
comment
Отлично - вы можете сделать так, чтобы один контроллер представления был делегатом для другого контроллера представления, и он будет работать. По мере роста приложения этот подход может усложняться — поскольку вам нужно все больше и больше делиться этими данными, вы будете передавать другие представления, которые содержат ваши данные. Если вы поместите его в другой класс, который отвечает за хранение данных, тогда он будет менее связан. Кроме того, представьте, что вы создаете приложение для Mac для настольных компьютеров — вы можете поделиться моделью. Все это чистота и передовая практика, но об этом нужно помнить, когда дизайн становится больше. - person bryanmac; 28.08.2011

В вашем массиве отклонений @interface YourClass:

@property (nonatomic, retain) NSMutableArray *publicArray;

В своем @implementation YourClass напишите это:

@synthesize publicArray;

Если у вас будет ссылка yourClassVariable на этот объект, вы можете получить доступ к этой переменной, используя [yourClassVariable publicArray]; или yourClassVariable.publicArray;

person Nekto    schedule 28.08.2011
comment
Большое спасибо за помощь, я могу решить эту проблему, используя делегат приложения. Я объявляю массив в своем классе делегата и заполняю его из другого контроллера представления. - person smartsanja; 28.08.2011