UIView не сохраняет объекты массивов

#objective-c #uiviewcontroller #uinavigationcontroller #nsmutablearray

#objective-c #uiviewcontroller #uinavigationcontroller #nsmutablearray

Вопрос:

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

 NearMe * temp = [[NearMe alloc] initWithNibName: @"NearMe" bundle:nil];
  

Я анализирую некоторый XML с местоположениями, а затем присваиваю значения an NSMutableArray , которые заполняют a UITableView .

Я анализирую XML в viewDidLoad методе, но мне не нужно анализировать его каждый раз, поскольку значение не изменится. Я хочу проанализировать его только в том случае, если массив есть nil , поэтому я ввел следующую проверку:

 if (allLocations == nil) ....
  

Так что XML анализируется только при необходимости, но каждый раз, когда я нажимаю кнопку «Назад» (в UINavigationController ), она стирает все объекты в массиве…. Я понятия не имею, почему это происходит…

Комментарии:

1. Можем ли мы увидеть viewDidLoad , что здесь есть несколько вещей, которые могут пойти не так

Ответ №1:

Поскольку ваше приложение NearMe каждый раз создает новый allLocations экземпляр, переменная экземпляра всегда будет находиться nil в viewDidLoad (которая, кстати, вызывается только в том случае, если _view переменная экземпляра есть nil ).

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

Комментарии:

1. Еще одна возможность, которую следует рассмотреть, чтобы избежать сохранения всего этого в памяти, — это выгрузить NSArray out в a plist после того, как XML был проанализирован в первый раз.