iOS: выполнение запроса к базе данных в viewDidLoad работает только один раз - PullRequest
1 голос
/ 11 октября 2011

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

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

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

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

    (additional code)
}

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

Итак, как бы мне заняться бегом

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

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

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

Ответы [ 2 ]

2 голосов
/ 11 октября 2011

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

0 голосов
/ 12 октября 2011

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

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

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

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

...