2013-08-29 3 views
0

В моей AppDelegate я объявил NSMutableArray как свойство:Как я могу остановить NSMutableArray в моем AppDelegate от освобождения?

@property NSMutableArray *delegateValuableItems; 

и выделил его в didFinishLaunchingWithOptions:

self.delegateValuableItems = [[NSMutableArray alloc] initWithCapacity:3]; 

У меня есть несколько контроллеров представлений в моем приложении, но только один получает доступ к этой собственности:

[appDelegate.delegateValuableItems addObject:@"a"]; 

, имеющий предварительно определил AppDelegate как свойство в контроллере представления:

@property AppDelegate  *appDelegate; 

и ссылка его в viewDidLoad:

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

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

По крайней мере, я думаю, что это так.

Все работает, если я запускаю приложение и сразу вводю все детали, но если я оставлю его в течение нескольких минут, [appDelegate.delegateValuableItems addObject:@"a"]; не добавляет объект в массив.

Спасибо за любую помощь, которую вы можете дать!

+1

Возможно, это потому, что iOS засыпает ваше приложение через 10 минут, когда оно было в фоновом режиме. Вы отправляете свое приложение на задний план? И убедитесь, что ваше свойство объявлено как сильное: '@property (nonatomic, strong) NSMutableArray delegateValuableItems' – lucaslt89

+0

При сбое приложения при попытке добавить его? –

+0

По умолчанию в XCode 4.3 свойства стали сильными. Если вы используете более раннюю версию, вам нужно написать: @property (strong) NSMutableArray * delegateValuableItems; –

ответ

0

Если вы хотите получить доступ к delegateValuableItems только из одного класса, это свойство должно быть только в этом классе. Однако, если вы хотите получить к нему доступ из всего приложения, но убедитесь, что это всегда один и тот же экземпляр (потому что если вы объявили его в делетете приложения, возможно, это потому, что вы хотите только один экземпляр для всего приложения) , тогда вы должны использовать Singleton.

У вас должен быть объект модели, который содержит NSMutableArray, и эта модель должна быть Singleton, чтобы вы всегда обращались к одному экземпляру NSMutableArray.

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

+0

Вы правы почему я объявил это в AppDelegate.Я попробую синглтон. thx – UglyBlueCat

+0

Ну, попробовав целую кучу вещей, которые не работали и не вернули код вручную, я не смог воспроизвести проблему, но я реализовал singleton в любом случае защитит от повторения, поэтому спасибо :) – UglyBlueCat

Смежные вопросы