按顺序迭代NSManagedObject

时间:2014-04-17 02:44:17

标签: objective-c core-data nsmanagedobject

我有2 NSManagedObjects,桌子和桌子字段和表与字段具有一对多的关系,即

表< ------>>领域

到目前为止,我已经能够像这样遍历字段:

for (NSManagedObject *field in [table valueForKey:@"fields"]) {
}

但是我现在需要使用字段实体中的整数索引属性以特定顺序执行此操作。

我是Core Data的新手,所以我假设[table valueForKey:@"fields"]会返回NSManagedObject的数组,但情况似乎并非如此。

我该怎么做?

3 个答案:

答案 0 :(得分:2)

使用NSSet时,多对多关系表示为valueForKey:

要将其转换为已排序的NSArray,您可以使用sortedArrayUsingDescriptors:方法:

NSSet *allFields = [table valueForKey:@"fields"];
NSSortDescriptor *indexSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"index" ascending:YES];
NSArray *sortedFields = [allFields sortedArrayUsingDescriptors:@[indexSortDescriptor]];

答案 1 :(得分:1)

[table valueForKey:@"fields"]应返回NSOrderSet而非NSArray,以便您可以使用[orderSet objectAtIndex:index]获取对象。

您必须管理fields中的table关系,如下所示:

enter image description here

当Xcode在To-Many-Relationships上生成访问者时出现错误,请检查Exception thrown in NSOrderedSet generated accessors

答案 2 :(得分:0)

我确信有更好的解决方案,但这是我能想到的最好的解决方案!

fields = [NSMutableDictionary new];
for (NSManagedObject *fld in [table valueForKey:@"fields"])
{
    [fields setValue:fld forKey:[fld valueForKey:@"index"]];
}

for (int i = 0; i < [fields count]; i++)
{
    field = [fields objectForKey:[NSNumber numberWithInt:i]];
}