Начиная с iOS 5 бета-версий я тестировал код моего приложения, и облегченный бит миграции для моей модели Core Data терпел неудачу. Я получаю сообщение об ошибке «нет такого столбца: FOK_REFLEXIVE», но странным образом я получаю его при первом запуске на устройствах и в симуляторе, когда нет более старой версии. Я ничего не изменил со времен iOS 4.x, который прекрасно работал.
Полная ошибка не дает никакой дополнительной информации об ошибке, и после того, как я немного постучал по столу, я, возможно, сузил ошибку до рефлексивных отношений в моей модели данных. Имя имеет отношение «многие ко многим» с «Именем» через отношение «имена». (Идея в том, что Роб связан с Бобом, Робертом и т. Д.). Может ли это внезапно быть запретным в iOS 5?
Кроме того, Core Data проходит через каждую версию модели данных и переносится для каждой независимо от того, какую версию модели данных должно использовать приложение? Странно, если я думаю, что ошибка переноса приложения запускается впервые,
Вот единственный связанный код, хотя это код Маркуса Зарры, который, я полагаю, используют все на Земле.
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (persistentStoreCoordinator_ != nil) {
return persistentStoreCoordinator_;
}
NSURL *storeURL = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"Saline.sqlite"]];
NSError *error = nil;
persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil] error:&error])
{
NSLog(@"Schema changes...");
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return persistentStoreCoordinator_;
}
ОБНОВЛЕНИЕ: полная ошибка следует
2011-10-20 08:14:17.700 Saline[28315:207] CoreData: error: (1) I/O error for database at /Users/rob5408/Library/Application Support/iPhone Simulator/5.0/Applications/865AD162-49BC-4809-A63A-23E6D5A5E5C4/Documents/.Saline.sqlite.migrationdestination_41b5a6b5c6e848c462a8480cd24caef3. SQLite error code:1, 'no such column: FOK_REFLEXIVE'
2011-10-20 08:14:17.731 Saline[28315:207] Schema changes...
2011-10-20 08:14:17.732 Saline[28315:207] Unresolved error Error Domain=NSCocoaErrorDomain Code=134110 "The operation couldn’t be completed. (Cocoa error 134110.)" UserInfo=0x6f7b2d0 {destinationURL=file://localhost/Users/rob5408/Library/Application%20Support/iPhone%20Simulator/5.0/Applications/865AD162-49BC-4809-A63A-23E6D5A5E5C4/Documents/.Saline.sqlite.migrationdestination_41b5a6b5c6e848c462a8480cd24caef3, reason=Cannot migrate store in-place: I/O error for database at /Users/rob5408/Library/Application Support/iPhone Simulator/5.0/Applications/865AD162-49BC-4809-A63A-23E6D5A5E5C4/Documents/.Saline.sqlite.migrationdestination_41b5a6b5c6e848c462a8480cd24caef3. SQLite error code:1, 'no such column: FOK_REFLEXIVE', NSUnderlyingError=0x6f7cda0 "The operation couldn’t be completed. (Cocoa error 134110.)", sourceURL=file://localhost/Users/rob5408/Library/Application%20Support/iPhone%20Simulator/5.0/Applications/865AD162-49BC-4809-A63A-23E6D5A5E5C4/Documents/Saline.sqlite}, {
NSUnderlyingError = "Error Domain=NSCocoaErrorDomain Code=134110 \"The operation couldn\U2019t be completed. (Cocoa error 134110.)\" UserInfo=0x6f75780 {NSSQLiteErrorDomain=1, NSFilePath=/Users/rob5408/Library/Application Support/iPhone Simulator/5.0/Applications/865AD162-49BC-4809-A63A-23E6D5A5E5C4/Documents/.Saline.sqlite.migrationdestination_41b5a6b5c6e848c462a8480cd24caef3, reason=I/O error for database at /Users/rob5408/Library/Application Support/iPhone Simulator/5.0/Applications/865AD162-49BC-4809-A63A-23E6D5A5E5C4/Documents/.Saline.sqlite.migrationdestination_41b5a6b5c6e848c462a8480cd24caef3. SQLite error code:1, 'no such column: FOK_REFLEXIVE', NSUnderlyingException=I/O error for database at /Users/rob5408/Library/Application Support/iPhone Simulator/5.0/Applications/865AD162-49BC-4809-A63A-23E6D5A5E5C4/Documents/.Saline.sqlite.migrationdestination_41b5a6b5c6e848c462a8480cd24caef3. SQLite error code:1, 'no such column: FOK_REFLEXIVE'}";
destinationURL = "file://localhost/Users/rob5408/Library/Application%20Support/iPhone%20Simulator/5.0/Applications/865AD162-49BC-4809-A63A-23E6D5A5E5C4/Documents/.Saline.sqlite.migrationdestination_41b5a6b5c6e848c462a8480cd24caef3";
reason = "Cannot migrate store in-place: I/O error for database at /Users/rob5408/Library/Application Support/iPhone Simulator/5.0/Applications/865AD162-49BC-4809-A63A-23E6D5A5E5C4/Documents/.Saline.sqlite.migrationdestination_41b5a6b5c6e848c462a8480cd24caef3. SQLite error code:1, 'no such column: FOK_REFLEXIVE'";
sourceURL = "file://localhost/Users/rob5408/Library/Application%20Support/iPhone%20Simulator/5.0/Applications/865AD162-49BC-4809-A63A-23E6D5A5E5C4/Documents/Saline.sqlite";
}