我无法理解为什么在执行executeFetchRequest后,分配给数组对象的值会变得“无序”。好吧,我不确定抓取是不是问题。这是代码。
objects=[NSArray arrayWithObjects:@"a",@"b",@"c",@"d",@"e",nil];
NSManagedObject *DB = nil;
for (int i=0;i<[objects count];i++){
DB = [NSEntityDescription
insertNewObjectForEntityForName:@"dbTable"
inManagedObjectContext:context];
[DB setValue:[objects objectAtIndex:i] forKey:@"item"];
[DB setValue:[NSString stringWithFormat:@"%3.2f", 0] forKey:@"value"];
}
objects = [context executeFetchRequest:request error:&error];
裴安平
在将执行执行到数组对象之后新的错误排序
index 0 :: Item:d
index 1 :: Item:c
index 2 :: Item:e
index 3 :: Item:b
index 4 :: Item:a
答案 0 :(得分:2)
由于底层数据库体系结构,Core Data以无序方式存储所有对象和多对象引用。除非您按照Alex描述的方式应用NSSortDescriptor,否则无法保证从获取请求返回的顺序。 Cocoa邮件列表中的This thread详细说明了所涉及的问题以及一些可能的解决方案。
这些解决方案包括具有索引属性,您可以在执行获取请求时对其进行排序,或者实现托管对象的链接列表并按顺序遍历。 Brian Webster创建了一个NSManagedObject的子类,它允许您在Core Data对象中维护有序到多个关系,可以找到源代码here。
答案 1 :(得分:1)
将NSSortDescriptor
应用于您的获取请求,例如:
NSSortDescriptor *itemDescriptor = [[NSSortDescriptor alloc] initWithKey:@"item" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:itemDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[sortDescriptors release];
[itemDescriptor release];
将对item
名称进行排序。您可以改用value
。
答案 2 :(得分:0)
执行获取请求而未指定您希望按特定键排序项时,会得到一个未排序的结果数组。您可以使用代码片段(例如以下代码片段)使用排序描述符扩展您的获取请求。
// Edit the sort key as appropriate.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"value" ascending:YES selector:@selector(caseInsensitiveCompare:)];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[sortDescriptor release];
[sortDescriptors release];