如何解决执行提取请求时崩溃
| 执行executeFetchRequest:error时发生崩溃: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
但是我想知道我的假设是否正确,是否有更简单的解决方案。
非常感谢。
解决方法
您不能将
MATCHES
运算符用于SQL存储(您几乎肯定会使用它),因为sqlite不支持正则表达式。我希望它会出错而不是超时,但显然不会。
您想使用CONTAINS
甚至更好的==
。如果您有一个称为“ 6”的属性,则通常表示该属性具有特定的唯一值,而不是具有很多小的变化的属性。使用==
/equals
将产生更快的读取速度。
, 错误很明显:)
我会在后台线程中尝试一下,看看会发生什么。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。