Hi,
ich habe von einen anderen Entwickler eine App übernommen und führe diese nun weiter. Der andere Entwickler hat "MagicalRecord" für die ganze CoreDate Geschichte genommen. Diese funktioniert leider aber nicht so, wie gewollt und deshalb habe ich ich entschlossen, da ich es persönlich auch besser finde das ganze ohne "MagicalRecord" umzusetzen und dafür die normal von Apple zur Verfügung gestellten Methoden zu nehmen. Dies funktioniert auch so weit gut, sodass ich mich an die Datenmigration begeben habe. Denn "MagicalRecord" speichert es woanders ab, als ich es haben möchte. Ich habe mir einfach gedacht, ich nehme die Datenbank und kopiere die von A nach B. Das mache ich so:
Alles anzeigen
Dies funktioniert ja auch ganz gut und die Datenbank wird dahin kopiert ohne Error aber wenn ich jetzt mein ManagedObjectContext erzeuge und dann die Daten aus der Datenbank holen will, ist die Datenbank leer und es werden keine Daten angezeigt. Warum?? Den MangedObjectContext erzeuge ich so:
Alles anzeigen
Stimmt da irgendwas nicht? Mache ich da irgendwas falsch? Vielen Dank für das durchlesen bis hierher!
Viele Grüße
Nils
ich habe von einen anderen Entwickler eine App übernommen und führe diese nun weiter. Der andere Entwickler hat "MagicalRecord" für die ganze CoreDate Geschichte genommen. Diese funktioniert leider aber nicht so, wie gewollt und deshalb habe ich ich entschlossen, da ich es persönlich auch besser finde das ganze ohne "MagicalRecord" umzusetzen und dafür die normal von Apple zur Verfügung gestellten Methoden zu nehmen. Dies funktioniert auch so weit gut, sodass ich mich an die Datenmigration begeben habe. Denn "MagicalRecord" speichert es woanders ab, als ich es haben möchte. Ich habe mir einfach gedacht, ich nehme die Datenbank und kopiere die von A nach B. Das mache ich so:
Quellcode
- [MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"local-database.sqlite"];
- NSURL *oldUrl = [NSPersistentStore MR_urlForStoreName:@"local-database.sqlite"];
- NSString *directory = [[NSFileManager defaultManager] applicationDocumentsDirectory];
- NSString *localDataPath = [directory stringByAppendingPathComponent:@"Databse.sqlite"];
- NSFileManager *fileManger = [NSFileManager defaultManager];
- // remove previous local version
- if ([fileManger fileExistsAtPath:localDataPath]) {
- [fileManger removeItemAtPath:localDataPath error:nil];
- }
- // made a copy from original location to the new location
- NSError *error;
- [fileManger copyItemAtPath:[oldUrl path] toPath:localDataPath error:&error];
- if (error) {
- NSLog(@"%@", error);
- }
Dies funktioniert ja auch ganz gut und die Datenbank wird dahin kopiert ohne Error aber wenn ich jetzt mein ManagedObjectContext erzeuge und dann die Daten aus der Datenbank holen will, ist die Datenbank leer und es werden keine Daten angezeigt. Warum?? Den MangedObjectContext erzeuge ich so:
Quellcode
- #pragma mark - Core Data stack
- - (NSURL *)persistentStoreURL {
- NSString *directory = [[NSFileManager defaultManager] applicationDocumentsDirectory];
- NSString *file = [directory stringByAppendingPathComponent:@"Kinderdiary.sqlite"];
- return [NSURL fileURLWithPath:file];
- }
- - (NSManagedObjectModel *)managedObjectModel {
- if (_managedObjectModel == nil) {
- NSURL *theURL = [[NSBundle mainBundle] URLForResource:@"Model" withExtension:@"momd"];
- _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:theURL];
- }
- return _managedObjectModel;
- }
- - (NSManagedObjectContext *)managedObjectContext {
- if (_managedObjectContext == nil) {
- NSPersistentStoreCoordinator *theCoordinator = self.persistentStoreCoordinator;
- if(theCoordinator != nil) {
- _managedObjectContext = [[NSManagedObjectContext alloc] init];
- _managedObjectContext.persistentStoreCoordinator = theCoordinator;
- [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(dataInCloudHasChanged:) name:NSPersistentStoreDidImportUbiquitousContentChangesNotification object:theCoordinator];
- }
- }
- return _managedObjectContext;
- }
- - (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
- if((_persistentStoreCoordinator != nil)) {
- return _persistentStoreCoordinator;
- }
- NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel];
- dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
- NSString *directory = [[NSFileManager defaultManager] applicationDocumentsDirectory];
- NSString *file = [directory stringByAppendingPathComponent:@"Database.sqlite"];
- NSURL *localURL = [NSURL fileURLWithPath:file];
- if (iCloudURL && self.cloudWanted.boolValue) {
- NSLog(@"iCloud is on");
- /* TODO */
- } else {
- NSLog(@"iCloud is of");
- NSMutableDictionary *options = [NSMutableDictionary dictionary];
- [options setObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];
- [options setObject:[NSNumber numberWithBool:YES] forKey:NSInferMappingModelAutomaticallyOption];
- [coordinator lock];
- [coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:localURL options:options error:nil];
- [coordinator unlock];
- }
- dispatch_async(dispatch_get_main_queue(), ^{
- [self createUI];
- [[NSNotificationCenter defaultCenter] postNotificationName:notificationName object:self userInfo:nil];
- });
- });
- _persistentStoreCoordinator = coordinator;
- return _persistentStoreCoordinator;
- }
Stimmt da irgendwas nicht? Mache ich da irgendwas falsch? Vielen Dank für das durchlesen bis hierher!
Viele Grüße
Nils