iCa*_*ode 35 xcode core-data nsfetchedresultscontroller ios ios10
我将我的项目升级到Xcode 8.现在,我正在使用Xcode 8和iOS 10组合获取此错误日志.
在下面的代码中将cacheName设置为nil似乎可以解决它.
NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:NULL cacheName:@"myCache"];
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能摆脱这个错误日志并在我的FRC中使用缓存?
Don*_*nit 26
不应忽略此错误,因为它可能导致应用程序崩溃.它与iOS 10文件描述符泄漏错误有关.有关于openradar和Apple Bug Reporter的报道.
会发生什么:如果使用带有非零cacheName的NSFetchedResultsController加载视图控制器,则每次保存托管对象上下文时,您将打开一个或多个指向fetchedResultsController的sectionInfo缓存文件的文件描述符.这意味着如果您将上下文保存255次,您将达到可在设备上打开的最大文件数,并且不会打开任何新资源,从而导致任何后续打开的xib文件,图像,数据库等失败.
对于已经在升级到iOS 10的设备上进行生产(使用xcode 7构建)的应用程序,也会出现此问题.
临时解决方案是使用nil作为cacheName禁用NSFetchedResultsController缓存:
NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:NULL cacheName:nil];
Run Code Online (Sandbox Code Playgroud)
显然,通过这种方式我们无法获得缓存的优势.我希望Apple尽快解决这个问题.我打算测试10.2 beta 1.
编辑 在iOS 10.2 beta 1上没有出现错误:它已经解决(暂时).
| 归档时间: |
|
| 查看次数: |
5066 次 |
| 最近记录: |