У меня есть NSMutableArray определено в моем классе AppDelegate:Почему моя переменная недоступна?
NSMutableArray *devices;
я заполнить массив из одного класса в методе didFinishLaunchingWIthOptions:
Devices *devs = [[Devices alloc] init];
self.devices = [devs getDevices];
Метод getDevices разбирает строку JSON и создает объект устройства , добавив его в массив:
NSMutableArray *retDevices = [[NSMutableArray alloc] initWithCapacity:[jsonDevices count]];
for (NSDiectionary *s in jsonDevices) {
Device *newDevice = [[Device alloc] init];
device.deviceName = [s objectForKey:@"name"];
[retDevices addObject: newDevice];
}
return retDevices;
Затем я использую массив устройств класса AppDelegate для заполнения таблицы Посмотреть. Как видно в методе cellForRowAtIndexPath:
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
Device *d = (Device *)[appDelegate.devices objectAtIndex:indexPath.row];
cell.label.text = d.deviceName;
Когда TableView заполняется на начальном этапе, это работает. Но когда я просматриваю список, и cellForRowAtIndexPath выполняется снова, d.deviceName выдает ошибку, потому что она вышла за рамки.
Может ли кто-нибудь помочь мне понять, почему? Я уверен, что это имеет какое-то отношение к выпуску предмета ... но ... ??
Заранее спасибо.
Вы пропускаете массив retDevices, который даже не объявлен должным образом (вы забыли *). Аналогичным образом во втором блоке кода вы обнаружите утечку объекта devs. –
Вы также просачиваете каждый newDevice внутри массива retDevices. –
Пропущенный * был надзором с моей стороны при копировании кода. У моего приложения действительно есть * в этой декларации. Должен ли newDevice быть выпущен в конце цикла? – bugfixr