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

标签 ios viewdidload viewdidappear

那么让我们看看我是否可以对我的问题写一个足够清晰的描述...

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

我的问题是,在信息 View 中,我这样调用数据库类中的函数:

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

    (additional code)
}

而且我在获取信息方面没有问题...工作正常... 但我的问题是,如果我返回搜索 View 并输入新 ID 或扫描新标签,调用/搜索不会再次运行,因为 View 仍在内存中...

那么,我该怎样去运行

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

每次我进入 View ...?

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

最佳答案

我认为您即将回答自己的问题。由于 viewDidLoad 仅在您的 View 加载时被调用,如果您使用相同的 ViewController,您将不会获得您正在寻找的结果。一种选择可能是每次销毁并创建一个新的 ViewController。就性能而言,这可能是可以接受的。另一个选项(您似乎已经探索过)是将您的代码放在 viewWillAppear 中。我可能会对此进行更多调查,并找出导致崩溃的原因。

关于iOS:在 viewDidLoad 中运行数据库查询只能运行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7721120/

相关文章:

iOS swift 3 : Share Data from share extension to Host App

android - 如何解决 android 和 ios 跨平台开发的#define 问题?

ios - 自定义 UiTableViewCell 在编辑或删除时缩小

ios - 在执行整个 init 方法之前调用 viewDidLoad

swift - 如何在每次加载 UIViewController 时运行一个函数

ios - 记住 UITableView 上的滚动位置

ios - 为什么类型转换在 Swift 2.0 中的工作方式不同?

ios - ViewDidLoad 未使用 UITabbarController 调用

ios - Grand Central Dispatch、viewWillAppear、viewDidAppear 执行顺序困惑

ios - 如果从不同的 View Controller 按回,则重新加载而不是重新加载。 swift