iOS: выполнение запроса к базе данных в viewDidLoad работает только один раз

Итак, давайте посмотрим, смогу ли я написать достаточно четкое описание моей проблемы ...

Я разрабатываю приложение для музея, где пользователь может найти произведения искусства либо по идентификатору, либо путем сканирования тега qr ... После ввода идентификатора или сканирования тега приложение отправляет пользователя из режима поиска, к информационному окну. Информационное представление собирает информацию об произведениях искусства из базы данных SQLite ...

Моя проблема в том, что в информационном окне я вызываю функцию из класса базы данных как такового:

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSArray *paintingInfo = [[PaintingDatabase database] findPaintingByID];

    (additional code)
}

И у меня нет проблем с получением информации ... работает нормально ... Но моя проблема в том, что если я вернусь в режим поиска и введу новый идентификатор или просканирую новый тег, вызов / поиск больше не будет запущен , поскольку вид все еще находится в памяти ...

Итак, как бы я начал бегать

NSArray *paintingInfo = [[PaintingDatabase database] findPaintingByID];

каждый раз, когда я вхожу в поле зрения ...?

Вместо этого я попытался поместить его в viewDidAppear, но получаю ошибку EXC_BAD_ACCESS ...


person user969043    schedule 11.10.2011    source источник


Ответы (2)


Думаю, вы близки к ответу на свой вопрос. Поскольку viewDidLoad вызывается только при загрузке вашего представления, если вы используете тот же ViewController, вы не получите желаемых результатов. Один из вариантов может заключаться в том, чтобы каждый раз уничтожать и создавать новый ViewController. Вероятно, это было бы приемлемо с точки зрения производительности. Другой вариант (который, кажется, вы уже изучили) - поместить свой код в viewWillAppear. Я бы, вероятно, изучил это подробнее и выяснил, что вызывает ваш сбой.

person D.C.    schedule 11.10.2011
comment
Я подумывал о том, чтобы сделать что-то вроде уничтожения представления, и, скорее всего, сделаю это, если не смогу устранить ошибку ... Сбой происходит внутри запроса к базе данных ... Я передаю строку в запрос, который содержит id для поиска, и я пытаюсь вывести эту строку в начале моего запроса с помощью NSLog, и здесь возникает ошибка неправильного доступа - person user969043; 11.10.2011
comment
Хорошо ... следующий вопрос ... Как мне уничтожить вид? : D - person user969043; 11.10.2011
comment
Что ж, это не представление, которое вы хотите уничтожить, а скорее контроллер представления. Где-то вы должны нажать на контроллер, чтобы отобразить это представление, так что вы хотите начать с него. - person D.C.; 11.10.2011
comment
Тем не менее, вам действительно нужно отслеживать сбой этой базы данных. Я бы не двинулся вперед, пока ты не сделаешь, иначе он будет тебя кусать - person D.C.; 11.10.2011
comment
Это правильное решение. Переместите код в viewWillAppear, исправьте сбой. - person Kenny Winker; 12.10.2011

Это немного сложно сказать из краткого описания, но мне кажется, что это скорее проблема архитектуры приложения, чем проблема с определенной функциональностью.

Возможно, вам будет лучше использовать альтернативный подход, запустив запрос вне информационного представления, а затем обновив свойства представления с помощью метода делегата. Это больше похоже на подход MVC - контроллер извлекает данные из модели, а затем передает данные в представление для отображения.

Как вы это описали, похоже, что ваше информационное представление принимает как функции представления, так и функции контроллера - возможно, поэтому вы сталкиваетесь с проблемами при попытке получить другие данные после завершения первоначального представления.

Однако сбой не похож на проблему с представлением - я бы поддержал совет, чтобы отследить это и выделить его как отдельную проблему.

person TimD    schedule 11.10.2011