一些背景资料
我正在制作一个应用程序,它有一个管理后端来更新它的数据。该应用程序将所有数据保存在 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"];