在考察從代碼產生的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
如果你發佈這個答案,我會接受它。 –