一些背景信息
我正在创建一个具有管理员后端的应用程序来更新它的数据。该应用程序将所有数据保存在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的“Image已存在,继续......”部分结束,因此在委托代码被注释掉时它不会执行任何操作。
编辑好的,我不知道为什么我之前没有注意到这一点,但应用程序挂起而没有任何错误输出到控制台。该死的!这是委托在检查崩溃的图像后调用我的方法的时候。该方法插入/更新我的sqlite数据库中的位置,我正在使用fmdb崩溃我的应用程序没有任何错误。这是在使用fmdb更新/插入之前发生的。
Edit2:我已将其缩小到此UPDATE查询。它锁定整个应用程序没有任何错误。
[db executeUpdate:@"UPDATE categories SET number_places = 21 WHERE id = 44"];
答案 0 :(得分:1)
由于NSLog(@"1 (pre)")
显然是从您提供的日志输出中调用的,但NSLog(@"1")
不是,这表明-[Image loadForPlace:]
没有返回。你必须在那里寻找原因。
答案 1 :(得分:0)
你确定数据有多个项吗?当你打电话时:
for (NSDictionary *row in data) {
// (...)
}
尝试记录计数:
NSLog(@"data.count: %i", data.count);