所以我的应用程序冻结了,不会响应触摸事件。只是坐在那里它不会崩溃吗?
如果我按下暂停按钮||,则会在以下代码行停止。
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];
答案 0 :(得分:0)
您正在执行的查询很可能会记录很多记录,并且获取这些记录需要很长时间。尝试在后台线程中进行该获取,并将记录的objectID移动到主线程。应用程序不会崩溃,因为您正在运行调试器。如果直接从设备而不是从Xcode运行应用程序,很可能会发生崩溃。
答案 1 :(得分:0)
找到了答案,我放弃了使用“LIKE [c]”,现在使用“==”代替。在获取任何内容时,我也放弃了在我的应用程序中使用[AppDelegate managedObjectContext],而是使用了contextForCurrentThread。
通过执行这两项操作,我的应用已停止冻结。