1

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

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

 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];
4

2 回答 2

0

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

于 2012-08-25T00:40:29.427 回答
0

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

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

于 2012-08-26T18:26:36.190 回答