执行获取请求时崩溃

时间:2011-06-14 09:44:01

标签: iphone core-data asynchronous crash request

我在执行executeFetchRequest时遇到了崩溃:错误:

MyApp[595]在允许的时间之外有主动断言:

{(
    <SBProcessAssertion: 0x1e5d1260> identifier: Suspending process: MyApp[595] 
permittedBackgroundDuration: 10.000000 reason: suspend owner pid:29 preventSuspend
  preventThrottleDownCPU  preventThrottleDownUI

这是我的代码:

NSString *predString = [NSString stringWithFormat:@"categoryId MATCHES '%@'", categoryId];
NSPredicate *predicate = [NSPredicate predicateWithFormat:predString];
[request setPredicate:predicate];
NSError *error = nil;
NSArray* objects = [context executeFetchRequest: request error: &error];

据我了解,在主线程中同步完成的提取花费了太多时间,超过10秒,并且该进程被暂停。

在互联网上浏览我发现这个很好的解决方案使得获取异步:

http://blog.zssz.me/2010/01/asynchronous-fetch-in-core-data.html

但我想知道实际上我的假设是否正确,以及是否有更简单的解决方案来解决这个问题。 非常感谢。

2 个答案:

答案 0 :(得分:0)

错误很清楚:)

我会在后台线程中尝试一下,看看会发生什么。

答案 1 :(得分:0)

您不能将MATCHES运算符与SQL存储(您几乎可以肯定使用)一起使用,因为sqlite不支持正则表达式。我原以为它会出错而不是超时,但显然不是。

您想使用CONTAINS甚至更好,==。如果您有一个名为catergoryID的属性,它通常表示具有特定唯一值的属性,而不是具有许多微小变化的属性。使用== / equals会产生更快的抓取速度。