On 4, Nov, 2011, at 03:06 PM, Roland King wrote: > > On Nov 4, 2011, at 1:41 PM, Martin Hewitson wrote: > >> >> On 4, Nov, 2011, at 02:01 AM, Roland King wrote: >> >>> >>> >>> >>> >>>> So, can I conclude from this that iCloud and core-data only works with SQL >>>> store? The WWDC video hints at this, but was not explicit. >>>> >>> >>> Not so. I have a core data app running using icloud and an XML store. This >>> is ios by the way and the store is not incremental, it's just being treated >>> as a blob which is fully synced each time but it's small so that's ok. >>> >>> Definitely if you want the incremental log style store you have to use SQL >>> but in general core data in iCloud will let you use whatever you like. >> >> I hadn't realised that I had made a choice. How does one choose an >> incremental store as opposed to a blob? Any pointers how you got your >> core-data iCloud app working would be greatly appreciated! > > Those two keys you add when you open the persistent store, > NSPersistentStoreUbiquitousContentNameKey and > NSPersistentStoreUbiquitousContentURLKey are the ones which tell Core Data > you're using the log file based core data (only available with SQLite). So > with that store, the actual SQLite database isn't in the cloud, it's kept > local, but a log file directory is created which is in the cloud and deltas > are synched up there. The idea is that each client just brings down the log > files and updates the database at a record level. Those keys only mean > anything with the SQLite store, which may be why you're having issues with > migration. I don't use any of those keys, I just have my store as a local > file which is synched wholesale. > > For your original mail, you want to migrate to SQLLite and then also migrate > to iCloud. I don't know if you can do that easily in one step. If I were > looking at this I would probably think of creating a new SQLLite store for > the migration, empty, opening the old local XML store and then migrating the > objects over with code. Whether you choose to make the new SQLite store local > and then migrate it up to iCloud or make it in the cloud and then update it > is a question I don't have a good answer to, I'm still a little confused by > how the initial log files get magically created when you migrate a document > to iCloud, I'm definitely missing a piece of information somewhere.
I think I've achieved this migration step with code like this: NSURL *oldURL = [NSURL fileURLWithPath:[applicationSupportDirectory stringByAppendingPathComponent:oldStoreName]]; NSURL *newURL = [NSURL fileURLWithPath:[applicationSupportDirectory stringByAppendingPathComponent:storeName]]; persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom]; if ([fileManager fileExistsAtPath:[oldURL path]]) { NSError *error = nil; NSPersistentStore *store = [persistentStoreCoordinator addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:oldURL options:options error:&error]; if (!store){ [[NSApplication sharedApplication] presentError:error]; [persistentStoreCoordinator release], persistentStoreCoordinator = nil; return nil; } // now add iCloud options [options setObject:storeName forKey:NSPersistentStoreUbiquitousContentNameKey]; NSURL *contentURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:containerID]; [options setObject:contentURL forKey:NSPersistentStoreUbiquitousContentURLKey]; [options setObject:[NSNumber numberWithBool:YES] forKey:NSValidateXMLStoreOption]; // migrate it store = [persistentStoreCoordinator migratePersistentStore:store toURL:newURL options:options withType:NSSQLiteStoreType error:&error]; if (error) { [NSApp presentError:error]; return nil; } // archive old store [fileManager moveItemAtURL:oldURL toURL:[oldURL URLByAppendingPathExtension:@"xml"] error:&error]; if (error) { [NSApp presentError:error]; } } else { // add iCloud [options setObject:storeName forKey:NSPersistentStoreUbiquitousContentNameKey]; NSURL *contentURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:containerID]; [options setObject:contentURL forKey:NSPersistentStoreUbiquitousContentURLKey]; // make a new persistent store coordinator if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:newURL options:options error:&error]){ [[NSApplication sharedApplication] presentError:error]; [persistentStoreCoordinator release], persistentStoreCoordinator = nil; return nil; } } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Martin Hewitson Albert-Einstein-Institut Max-Planck-Institut fuer Gravitationsphysik und Universitaet Hannover Callinstr. 38, 30167 Hannover, Germany Tel: +49-511-762-17121, Fax: +49-511-762-5861 E-Mail: martin.hewit...@aei.mpg.de WWW: http://www.aei.mpg.de/~hewitson ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com