0

一些背景资料

我正在制作一个应用程序,它有一个管理后端来更新它的数据。该应用程序将所有数据保存在 SQLite 数据库中以提供离线支持。后端有一个简单的 API,它根据应用程序的最新同步日期以 JSON 格式返回新数据。数据包含下载并保存在应用程序中的图像。

问题

我已经解决了大部分问题,但陷入了这个问题。加载数据后,我循环遍历它并启动 ImageHandler 类,该类将下载图像、保存图像并在数据库中插入一行。这第一次工作正常,但它不会超过循环中的第一个数据行。如果我取消注释 [imageHandler loadForPlace:row]; / [imageHandler loadForCategory:row]; 行循环运行得很好。ImageHandler 类只是检查图像是否存在,如果不存在则下载它。

for (NSDictionary *row in data) {
    NSLog(@"Action: %@. Loading images...", [row objectForKey:@"action"]);

    imageHandler = [[Image alloc] init];
    imageHandler.delegate = self;

    if([[row objectForKey:@"action"] isEqualToString:@"CREATE_POST"] || [[row objectForKey:@"action"] isEqualToString:@"UPDATE_POST"]) {
        NSLog(@"1 (pre)");
        [imageHandler loadForPlace:row];
        NSLog(@"1");
    }
    else {
        NSLog(@"2 (pre)");
        [imageHandler loadForCategory:row];
        NSLog(@"2");
    }
}

输出:

2012-04-18 10:32:08.698 Appname[17636:11603] Syncronize: Request done
2012-04-18 10:32:08.698 Appname[17636:11603] Found 2 items to create or update.
2012-04-18 10:32:08.698 Appname[17636:11603] Action: CREATE_POST. Loading images...
2012-04-18 10:32:08.699 Appname[17636:11603] 1 (pre)
2012-04-18 10:32:08.699 Appname[17636:11603] id: 778
2012-04-18 10:32:08.700 Appname[17636:11603] Image already exists, continuing...
2012-04-18 10:32:08.700 Appname[17636:11603] Image(s) saved
2012-04-18 10:32:08.700 Appname[17636:11603] Create place
2012-04-18 10:32:08.701 Appname[17636:11603] Has image

loadForItem(由 loadForPlace 和 loadForCategory 调用):

如您所见,我注释掉了委托调用,因为它们是导致循环不继续的原因。当我运行这个循环继续没有问题。使用我的测试数据,我目前最终处于 loadForItem 的“图像已经存在,继续......”部分,因此当委托代码被注释掉时它不会做任何事情。

编辑:好的,我不知道为什么我以前没有注意到这一点,但是应用程序挂起,没有任何错误输出到控制台。该死!当委托在检查崩溃的图像后调用我的方法时。该方法插入/更新我的 sqlite 数据库中的位置,我正在使用 fmdb,它使我的应用程序崩溃而没有任何错误。这在使用 fmdb 更新/插入之前发生过。

Edit2:我已将其范围缩小到此 UPDATE 查询。它锁定整个应用程序而没有任何错误。 [db executeUpdate:@"UPDATE categories SET number_places = 21 WHERE id = 44"];

4

2 回答 2

1

由于NSLog(@"1 (pre)")显然被称为,从您提供的日志输出中,但NSLog(@"1")不是,这表明它-[Image loadForPlace:]没有返回。你必须在那里寻找原因。

于 2012-04-18T09:03:57.657 回答
0

您确定数据有超过 1 项吗?你打电话时:

    for (NSDictionary *row in data) {
     // (...)
    }

尝试记录计数:

NSLog(@"data.count: %i", data.count);
于 2012-04-18T08:47:48.660 回答