我在执行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
但我想知道实际上我的假设是否正确,以及是否有更简单的解决方案来解决这个问题。 非常感谢。
答案 0 :(得分:0)
错误很清楚:)
我会在后台线程中尝试一下,看看会发生什么。
答案 1 :(得分:0)
您不能将MATCHES
运算符与SQL存储(您几乎可以肯定使用)一起使用,因为sqlite不支持正则表达式。我原以为它会出错而不是超时,但显然不是。
您想使用CONTAINS
甚至更好,==
。如果您有一个名为catergoryID
的属性,它通常表示具有特定唯一值的属性,而不是具有许多微小变化的属性。使用==
/ equals
会产生更快的抓取速度。