- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 MacOsX 10.6 上使用 SQL 存储时遇到了 CoreData 的奇怪问题。我有一个NSManagedObject
子类名为 Family
具有属性 name
和关系personList
连接到另一个NSManagedObject
子类名为 Person
具有属性 firstname
和反比关系family
。一个Person
只有一个 family
,以及 family
可以有几个Person
s。
假设我有一个Family
对象family
指向“Doe”家庭 2 Person
(约翰和简)连接到它,我执行以下请求:
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:[NSEntityDescription entityForName:@"Person" inManagedObjectContext:managedObjectContext]];
[request setPredicate:[NSPredicate predicateWithFormat:@"family.name=%@",[family name]]];
NSArray *array = [managedObjectContext executeFetchRequest:request error:&error];
我得到一个大小为 2 的数组,其中有 2 个人:Jane 和 John,姓氏 Doe。现在,如果我使用其合成访问器更新该系列,在我的例子中:
[family setName:@"Wheat"]
获取Person
的列表后我无法使用相同的获取请求。结果是[array count]
的0
.
如果我将谓词更改为以下行,它会再次起作用:
[request setPredicate:[NSPredicate predicateWithFormat:@"family=%@",family]];
因此,就好像谓词没有使用系列属性名称的更新版本,即使我有 NSFetchRequest
设置为默认值(因此 includesPendingChanges
返回 YES)。这对我来说毫无意义。看来NSFetchRequest
找到 family
对象,但看不到它的值 family.name
已更新,未保存,位于 managedObjectContext
在内存中。当然,如果我保存商店,它就会再次起作用。
有什么想法吗?我已经阅读了 Mac 文档,但不明白为什么会失败。
最佳答案
我认为这里的关键是理解获取请求。它从持久存储中检索数据,因此很明显,如果您没有保存到持久存储中,它就不会找到该数据。如果您考虑到这一点,您所描述的情况是完全合乎逻辑的。
来自核心数据编程指南:
You cannot fetch using a predicate based on transient properties (although you can use transient properties to filter in memory yourself). Moreover, there are some interactions between fetching and the type of store—for details, see “Store Types and Behaviors.” To summarize, though, if you execute a fetch directly, you should typically not add Objective-C-based predicates or sort descriptors to the fetch request. Instead you should apply these to the results of the fetch. If you use an array controller, you may need to subclass NSArrayController so you can have it not pass the sort descriptors to the persistent store and instead do the sorting after your data has been fetched.
关于sql - NSFetchRequest 未捕获属性已更改的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7128211/
我想使用 iOS10 中引入的新核心数据 API。 @available(iOS 10.0, *) open class func fetchRequest() -> NSFetchRequest 我
使用此函数对表格 View 中的单元格进行排序。我的获取请求中出现错误。 do 循环内的行 notes = try context.fetch(request) 导致错误,请求带有下划线 错误显示“无
我的核心数据模型中有一个名为 Task 的实体。 Task 实体有一个名为 date 的可转换属性。 date 属性的类是一个名为 TDate 的类(它符合 NSCoding,因此是一个可转换的属性)
使用 NSFetchedResultsController 和 NSFetchRequest 可以设置返回每个属性中最高值的查询。 例如: Entity_001 A=F B=27 C=57 Entit
我有两个实体:Patient 和 Job。患者与作业具有一对多关系,称为“作业”,而作业与患者具有一对一关系,称为“患者”。作业具有名为“dueDate”(日期)和“已完成”(BOOL)的属性,而患者
如果不提供 NSSortDescriptor,我们就无法使用 NSFetchRequest。我想要做的就是获取结果并按创建顺序显示它们。有没有内置的方法可以做到这一点?或者我必须创建一个新的“自动增量
我必须为我的 iPhone 应用程序创建一个 NSFetchRequest,它返回与以下 SQL 语句相同的结果: SELECT week , year , SUM(durat
我在 MacOsX 10.6 上使用 SQL 存储时遇到了 CoreData 的奇怪问题。我有一个NSManagedObject子类名为 Family具有属性 name和关系personList连接到
我的数据模型如下:类别 —>名字 —>items(“汽车”类型的项目数组) 我正在尝试获取部分作为名称,行应该是项目(这是一个 NSArray) 这是我的代码,我期望将行作为 Car 返回,但它仍然返
我有一个数据列表,其中父子层次结构最多为三个级别。例如 项目A(祖 parent ) 项目B1(父级) 项目C1(子级) 项目C2(子级) 项目C3(子级) 项目B2(父级) 项目C4(子级) ...
当从核心数据库获取数据并同时更新同一实体的数据时,fetchRequest 返回 nil let fetchRequest = NSFetchRequest(entityName: "Abc")
我有下面的方法,我通过 NSDate() 来获取今天的所有结果。我试图在午夜到午夜之前得到结果,但似乎不起作用。我注意到我的谓词输出如下: "date >= CAST(460249200.000000
我试图在 tableView 中显示项目,但我的 fetchResult 数组没有显示任何内容。我得到这个 NSLog: 2013-09-13 13:02:01.088 Prototype[67018
关于这个问题,我正在回答我自己的问题。在我看到尽可能多的其他答案之前,我不会接受它。 在过去的几天里,我一直在努力处理下面的代码 - (id)fetchUniqueEntity:(Class)enti
我有一个 Student 实体,它有一个 dateOfBirth 属性。 我想从 Student 实体中获取所有 Students,按出生日期的升序排列,但按月份的降序排列。 例如:属于同一月份的学生
我是 CoreData 的新手,正在尝试编写一个通用函数来查询数据库中的信息。我遇到了一些问题。 我设置了一个名为 NSError *error 的私有(private)变量。我的代码如下所示: @i
我正在使用自定义源表达式 NSExpression(format: "FETCH(FUNCTION($manager, \"customFetchRequestForSourceEntityNamed
我有一个 NSFetchRequest(在 NSFetchedResultsController 中执行)用于以下数据: Person (one-to-many) Encounter Encounte
我的程序有一个带有两个相关表的 sqlite 数据库。一个称为“排名”,另一个称为“要求” 我想从“Requirement”表中获取与“Rank”表中的特定行有关系的所有行。以下是我的代码,它获取整个
我已经就与此相关的不同事情发布了类似的问题,但已经为此苦苦挣扎了大约一周,但无济于事。这一切都归结为这段代码: NSFetchRequest *oldFetchRequest = [[NSFetchR
我是一名优秀的程序员,十分优秀!