iOS:在viewDidLoad中运行数据库查询只能运行一次

时间:2011-10-11 03:32:06

标签: ios viewdidload viewdidappear

那么让我们看看我是否能够清楚地描述我的问题......

我正在为博物馆开发一个应用程序,用户可以通过id或扫描qr标签找到艺术品...... 输入ID或扫描标签后,应用程序会将用户从搜索视图发送到信息视图。 info视图从SQLite数据库中收集有关艺术作品的信息...

我的问题是,在info视图中,我从数据库类中调用函数:

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

    (additional code)
}

我收到信息没问题......工作正常...... 但我的问题是,如果我回到搜索视图并输入新的ID或扫描新标签,则不会再次运行呼叫/搜索,因为视图仍在内存中...

那么,我将如何运行

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

每次我进入视图......?

我已尝试将其放在viewDidAppear中,但我收到了EXC_BAD_ACCESS错误...

2 个答案:

答案 0 :(得分:2)

我认为你接近回答你自己的问题。由于viewDidLoad仅在视图加载时被调用,因此如果使用相同的ViewController,则无法获得所需的结果。一种选择可能是每次销毁和创建一个新的ViewController。在性能方面,这可能是可以接受的。另一个选项(您似乎已经探索过)是将您的代码放在viewWillAppear中。我可能会更多地研究这一点,并找出导致崩溃的原因。

答案 1 :(得分:0)

从简短的描述中说出来有点困难,但这对我来说更像是一个应用程序架构问题,而不是具有特定功能的问题。

使用替代方法,从信息视图外部运行查询,然后通过委托方法更新视图的属性,可能会更好。这更像是一种MVC方法 - 控制器从模型中检索数据,然后将数据传递给要显示的视图。

正如您所描述的那样,您的信息视图似乎同时具有视图和控制器功能 - 这可能就是为什么您在初始视图完成后遇到尝试获取不同数据的问题的原因。

虽然崩溃对视图来说听起来并不像是一个问题 - 但我还是建议追踪它并将其作为一个单独的问题。