HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – NSPredicate未执行大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这很有趣.
在我的应用程序中,我在数据库中创建了数千个条目(在另一个线程中,我正在使用MagicalRecord).一切似乎都很好(从背景/前景/上下文的角度来看).

当在主线程中,我尝试获取“刚插入”的数据时,我发现了以下行为:

- (NSArray *) familiesInCompany:(Company *) company {
  NSPreDicate *preDicate1 = [NSPreDicate preDicateWithFormat:@"company == %@",company];
  NSPreDicate *preDicate2 = [NSPreDicate preDicateWithFormat:@"company.name == %@",company.name];

  NSArray *first = [Family MR_findAllSortedBy:@"name" ascending:YES withPreDicate:preDicate1];
  NSArray *second = [Family MR_findAllSortedBy:@"name" ascending:YES withPreDicate:preDicate2];
  NSArray *third = [Family MR_findByAttribute:@"company" withValue:company andOrderBy:@"name" ascending:YES];

  return second;
}

现在我得到的是:

> first:是一个空数组
> second:按预期包含所有Family对象
>第三:是一个空数组.

通过调试sql语句,我得到以下内容

“第一”声明:

“第二”声明“:

“第三”声明:

热闹的是我关闭应用程序(我的意思是真的手动终止它)并且我打开它,所有三个“获取”语句都有效.

为什么第一个和第三个fetch语句似乎永远不会被执行?如何深入研究这个问题?

解决方法

我有同样的问题,这是我想出来的,以及我是如何解决它的. @H_500_3@magical Record具有根NsmanagedObjectContext作为认NsmanagedObjectContext的父级.当我在认上下文中创建NSFetchedResultsController时,一切似乎都正常,就像你一样.

问题是所有新的NsmanagedObject都带有他们仍然临时的ObjectID.因此,就我而言,我使用NSPreDicate来对关联表进行@L_675_15@范围.我不只是调用关联方法,因为我不想将所有内容加载到内存中,并希望NSFetchedResultsController为我处理更改.

使用临时ObjectID,@L_675_15@找到零结果,这正是它显示内容.

显然,子上下文(认)不会获得转换为非临时ID的好处,即使它已被持久保存到后备存储中.

我试图使用obtainPeRMANentIDsForObjects强制解决问题时,更糟糕的是发生了错误错误: Core Data抱怨它无法满足我的实例的错误.没关系,实际上这绝不是一个错误.简单地刷新对象也没有效果.我怀疑这是一个核心数据错误,几乎没有人发痒,因为他们只是使用关联方法获取NSSet.

我的修复是使用NSFetchedResultsController的父上下文,就像在这个问题中一样,Magical Record,saving,and NSFetchedResultsController.

我在编辑时已将认值包装在新的子上下文中,因此,使用createInContext将实例复制到该编辑上下文中,因此除了将.parentContext添加到参数之外,我不需要做任何额外的工作.

便说一句,这只发生在关联源的新实例上.一旦一个实例从启动时出现,它就有一个非临时的ObjectID,从来没有遇到过这个问题.

大佬总结

以上是大佬教程为你收集整理的ios – NSPredicate未执行全部内容,希望文章能够帮你解决ios – NSPredicate未执行所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。