Я испытываю самую странную ошибку здесь, и я надеюсь, что кто-то может мне помочь через это.Я нахожусь в (медленном и болезненном) процессе преобразования моего существующего приложения в ARC.Мое приложение - это базовое приложение для чтения книг, которое использует FMDB для общения с БД.Преобразование прошло нормально, но сейчас происходит сбой, когда я должен загружать имена своих глав tableView.
В моем заголовочном файле я создаю этот массив, который содержит все мои собственные объекты томов:
NSMutableArray * volumes;
}
@property (nonatomic, strong) NSMutableArray * volumes;
У меня все хорошо?В файле .m я синтезирую свою переменную, а затем в viewDidLoad заполняю массив результатом вызова db:
FMDatabase * database = [FMDatabase databaseWithName:name];
FMResultSet * set = [database executeQuery:@"SELECT * FROM book_volumes"];
volumes = [[NSMutableArray alloc] init];
while ([set next]) {
Volume * v = [[Volume alloc] initWithResultSet:set];
[volumes addObject:v];
}
В результате массив заполнен 7объекты.Если я посмотрю на значения внутри массива в окне отладчика, они все там, и все пользовательские объекты имеют все свои свойства.
Когда я нажимаю кнопку play, она переходит к numberOfSectionsInTableView :,и если я посмотрю на значения моего массива в то время как в этом методе в первый раз, все значения все еще там.Но когда нажмете кнопку play, он снова перейдет к тому же методу, numberOfSectionsInTableView :.Это правильно?Для вызова numberOfSectionsInTableView: дважды?Если я посмотрю на значения в массиве во время этого второго вызова, все еще будет 7 объектов, но я не могу получить доступ к их значениям.У них еще есть адреса, но, как я ни стараюсь, их нет
Это особенно проблематично, когда мы переходим к cellForRowAtIndexPath :.Он аварийно завершает работу, потому что не может получить доступ к данным об объектах в массиве томов.
Я довольно новичок в ARC, поэтому, возможно, я что-то упускаю, но есть вероятность, что ARC разрешает объекты массивабыть выпущенным слишком рано?
Понятия не имею, что здесь может происходить.Я успешно извлекаю данные из базы данных в массив, а затем каким-то образом они просто исчезают, прежде чем мы приступим к заполнению tableView.
Что мне не хватает?
Спасибо!
ОБНОВЛЕНИЕ:
Так что это все еще не работает, и это все еще сводит меня с ума.Я думал, что приложу скриншот, когда я вхожу в метод numberOfRowsInSection: и все взрывается:
ОБНОВЛЕНИЕ СНОВА:
Хорошо, такв итоге инструмент преобразования ARC изменил свойства моего пользовательского объекта так, чтобы перед ним стояло __unsafe_unretained
.Я хотел бы поймать это раньше.Я взял это и изменил свойство на строку, и ошибка исчезла.
Спасибо всем, кто просмотрел это.