views:

253

answers:

3

Please tell me: If I use Core Data in my iPhone app, I have basically two files. The mydatamodel.xcdatamodel file, and then I need an .sqlite file. Apple provides this code snippet:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
    if (persistentStoreCoordinator != nil) {
        return persistentStoreCoordinator;
    }

    NSString *appDirPath = [self applicationDocumentsDirectory];
    NSString *storeFileName = @"mystore.sqlite";
    NSURL *storeUrl = [NSURL fileURLWithPath:[appDirPath stringByAppendingPathComponent:storeFileName]];

    NSError *error = nil;
    persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

    if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) {
        NSLog(@"Error: %@, %@", error, [error userInfo]);
        abort();
    }

    return persistentStoreCoordinator;
}

Will this create the file if it's not available already?

[persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]

My app doesn't need initial data, because it will download it when the user launches the app.

+3  A: 

Yes, Core Data will create the SQLite db just after the first launch of your application in your app delegate.

unforgiven
Perfect. Thank you. What if I provided that file already? Afaik I can't ship it directly into the documents dir. So I would first copy it there before attempting to create it, right?
dontWatchMyProfile
Correct. You would have a release version in your app bundle and copy it over.
gerry3
+1  A: 

Yes. The boiler-plate Core Data stack code provided by Apple's templates will create the database file if it doesn't already exist.

gerry3
A: 

Yes, that method adds a new persistent store of a specified type at a given location, and returns the new store. Here is the documentation.

Ryan Ferretti