在考察从代码产生的SQLite数据库下面我发现,核心数据似乎并没有保存它们的创建顺序的对象(记录)。SQLite记录没有按照使用Core Data创建的顺序保存?
-(void) CreateData
{
// Create an organization
NSManagedObjectContext *context = [self managedObjectContext];
NSEntityDescription *org_entity = [NSEntityDescription entityForName:@"Organization" inManagedObjectContext:context];
NSManagedObject *organization = [NSEntityDescription insertNewObjectForEntityForName:[org_entity name] inManagedObjectContext:context];
[organization setValue:@"MyCompany" forKey:@"name"];
[organization setValue:[NSNumber numberWithInt:[organization hash]] forKey:@"id"];
// Create several people
NSEntityDescription *person_entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:context];
NSManagedObject *john = [NSEntityDescription insertNewObjectForEntityForName:[person_entity name] inManagedObjectContext:context];
[john setValue:[NSNumber numberWithInt:[john hash]] forKey:@"id"];
[john setValue:@"John" forKey:@"name"];
NSManagedObject *jane = [NSEntityDescription insertNewObjectForEntityForName:[person_entity name] inManagedObjectContext:context];
[jane setValue:[NSNumber numberWithInt:[jane hash]] forKey:@"id"];
[jane setValue:@"Jane" forKey:@"name"];
NSManagedObject *bill = [NSEntityDescription insertNewObjectForEntityForName:[person_entity name] inManagedObjectContext:context];
[bill setValue:[NSNumber numberWithInt:[bill hash]] forKey:@"id"];
[bill setValue:@"Bill" forKey:@"name"];
// Designate the leader for "My Company"
[organization setValue:john forKey:@"leader"];
// Designate subordinates
NSMutableSet *johns_employees = [john mutableSetValueForKey:@"employee"];
[johns_employees addObject:jane];
[johns_employees addObject:bill];
NSError *error = nil;
if(![context save:&error])
{
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
虽然我不打算依靠的记录的实际应用很有趣的学习顺序的顺序似乎是随机的。人们会认为底层的序列化例程每次都会产生相同的结果。
出于好奇,为什么会出现这种情况?
不确定CoreData/SQLite的内部结构,但在许多数据库中的存储顺序由聚集索引确定。主键通常是集群索引。如果没有主键或聚集索引,订单可能按照存储它的顺序进行,然后应用程序需要通过重要的查询和排序。如果有一个聚集索引,并且查询没有orderby,它会按聚簇索引进行排序。 – bryanmac
如果你发布这个答案,我会接受它。 –