iOS应用程序冻结,但不会崩溃?

时间:2012-08-25 00:36:12

标签: objective-c ios core-data nspredicate

所以我的应用程序冻结了,不会响应触摸事件。只是坐在那里它不会崩溃吗?

如果我按下暂停按钮||,则会在以下代码行停止。

 NSArray *results = [context executeFetchRequest:request error:&error];

如果我然后按下播放该应用程序仍然被冻结,如果我再次按下暂停,它仍然指向上面的代码行。

以下是暂停的完整代码。

NSManagedObjectContext *context = [NSManagedObjectContext contextForCurrentThread];
NSEntityDescription *entity = [self entityDescriptionInContext:context];
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:[entity name]];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(thingId like[c] %@)", sessionID];
[request setPredicate:predicate];

NSError *error = nil;
NSArray *results = [context executeFetchRequest:request error:&error];  **<-- Pause lands me here**

if (!results || error || 0 == results.count){
    return nil;
}

return [results objectAtIndex:0];

2 个答案:

答案 0 :(得分:0)

您正在执行的查询很可能会记录很多记录,并且获取这些记录需要很长时间。尝试在后台线程中进行该获取,并将记录的objectID移动到主线程。应用程序不会崩溃,因为您正在运行调试器。如果直接从设备而不是从Xcode运行应用程序,很可能会发生崩溃。

答案 1 :(得分:0)

找到了答案,我放弃了使用“LIKE [c]”,现在使用“==”代替。在获取任何内容时,我也放弃了在我的应用程序中使用[AppDelegate managedObjectContext],而是使用了contextForCurrentThread。

通过执行这两项操作,我的应用已停止冻结。

相关问题