#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 в aplist
после того, как XML был проанализирован в первый раз.