核心数据麻烦排序相关对象的 NSSet

Posted

技术标签:

【中文标题】核心数据麻烦排序相关对象的 NSSet【英文标题】:Core Data trouble ordering NSSet of related objects 【发布时间】:2011-04-05 18:08:57 【问题描述】:

这里是核心数据的新手:

给定一位患者,我想列出该患者的所有过敏症。

实体Patient 具有在对象模型中定义的一对多关系allergies

子实体Allergy 还定义了反向关系patient

Allergy 有一个属性,description 的值是一个 NSString。

我想得到allergies关系返回的NSSet,按description排序,放入一个数组实例变量中,该变量将映射到表格视图。

代码:

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];  
NSSet *unorderedAllergies = [selectedPatient valueForKey:@"allergies"];  
NSArray *sortedArray = [unorderedAllergies sortedArrayUsingDescriptors:sortDescriptors];  
[allergiesArray addObjectsFromArray:sortedArray];

注意:selectedPatient 是从前一个控制器传入的父 NSManagedObject Patient 的实例变量。 allergiesArray 是我要映射到表格视图的数组。

问题发生在:

NSArray *sortedArray = [unorderedAllergies sortedArrayUsingDescriptors:sortDescriptors]; 

调试器在此行显示EXEC_BAD_ACCESS,应用程序崩溃。我的猜测是它与 Core Data 延迟加载的相关对象(即“故障对象”)有关。

非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

description 是 NSObject 的方法名,返回一个描述对象的字符串。它是使用 NSLog 记录对象时调用的方法。从 NSObject 继承的所有类都已经有一个description 方法。

不要将description 用作属性或属性名称,因为您可能无法得到预期的结果。使用allegryDescription 或类似名称将属性名称更改为不会发生冲突的名称。

【讨论】:

+1 好收获。我想每个人都会在某些时候被这个问题所困扰——“描述”是一个属性的自然名称。 我同意。很棒的收获。谢谢!

以上是关于核心数据麻烦排序相关对象的 NSSet的主要内容,如果未能解决你的问题,请参考以下文章

NSSortDescriptor 对 Core Data NSSet 对象进行排序的最有效方法

将核心数据对象设置为 NSSet

核心数据缓存 NSSet 属性

用 CoreData 对象填充 NSSet

核心数据 NSSet 返回空的对象数组

如何仅将具有不同属性的对象添加到核心数据到多关系 NSSet