Могу ли я иметь один NSMutableArray в моем приложении с несколькими представлениями? - PullRequest
0 голосов
/ 03 октября 2011

У меня есть навигационное приложение, которое имеет несколько видов. Можно ли использовать один NSMutableArray для всего приложения? Могу ли я добавить объекты к этому NSMutableArray в одном представлении, а затем удалить объект из того же NSMutableArray из другого представления? Я пытался

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

, но это дает мне ноль, когда я пытаюсь получить доступ к массиву appDelegate. Если кто-нибудь может дать мне какую-либо идею или помощь, или ссылку. Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 03 октября 2011

Если в вашем приложении несколько представлений, и в этом случае вы хотите, чтобы переменная была доступна для каждого представления, вы всегда должны создать класс Модель / Данные (singleton) и определить переменную в этом. Примерно так:

//DataClass.h      

@interface DataClass : NSObject {    

NSMutableArray *arrGlobal;     

}    
@property(nonatomic,retain)NSMutableArray *arrGlobal;   
+(DataClass*)getInstance;    
@end  



//DataClass.m    
@implementation DataClass    
@synthesize arrGlobal;    
static DataClass *instance =nil;    
+(DataClass *)getInstance    
{    
    @synchronized(self)    
    {    
        if(instance==nil)    
        {    

            instance= [DataClass new];    
        }    
    }    
    return instance;    
}    

Теперь в вашем контроллере представления вам нужно вызвать этот метод как:

DataClass *obj=[DataClass getInstance];  
obj.arrGlobal = arrLocal; 

Эта переменная будет доступна каждому контроллеру представления. Вам просто нужно создать экземпляр класса данных.

2 голосов
/ 03 октября 2011

Для вашего типа вопроса я бы использовал синглтон.

http://en.wikipedia.org/wiki/Singleton_pattern

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

1 голос
/ 18 июня 2013

В подходе Singleton добавьте

instance.arrGlobal = [[NSMutableArray alloc] init];

следующим образом:

@synchronized(self)    
{    
    if(instance==nil)    
    {    

        instance= [DataClass new];
        instance.arrGlobal = [[NSMutableArray alloc] init];
    }    
}    
return instance;

Таким образом, вы можете инициализировать массив и использовать его правильно.

1 голос
/ 03 октября 2011

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

Оператор для получения указателя appDelegate выглядит правильным, поэтому яЯ предполагаю, что указатель на массив либо не устанавливается (и не сохраняется) в вашем классе myappDelegate, либо вы неправильно создали экземпляр AppDelegate.

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