У меня есть приложение с основными данными, которое я использую с базой данных sql lite.Я заполнил его в моем симуляторе, и теперь я хотел бы отправить его с приложением, , но всякий раз, когда я устанавливаю его на ipad, БД пуста!
У меня естьдобавил заполненную базу данных в проект (из папки симулятора), и у меня в делегате есть следующее:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[window addSubview:splitViewController.view];
[window makeKeyAndVisible];
NSString *Path = [[NSBundle mainBundle] bundlePath];
NSString *DataPath = [Path stringByAppendingPathComponent:@"data.plist"];
NSDictionary *tempDict = [[NSDictionary alloc] initWithContentsOfFile:DataPath];
self.data = tempDict;
[tempDict release];
// Override point for customization after application launch.
// Add the split view controller's view to the window and display.
[self createEditableCopyOfDatabaseIfNeeded];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableDictionary *appDefaults = [NSMutableDictionary dictionaryWithObject:@"NO" forKey:@"enableRotation"];
[appDefaults setObject:@"0" forKey:@"orientation"];
[appDefaults setObject:@"100" forKey:@"repID"];
[appDefaults setObject:@"Atlanta Dental" forKey:@"RepName"];
[defaults registerDefaults:appDefaults];
//self.window.rootViewController = self.splitViewController;
return YES;
}
-(void)createEditableCopyOfDatabaseIfNeeded
{
// Testing for existence
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:DATABASE_NAME];
success = [fileManager fileExistsAtPath:writableDBPath];
if (success)
return;
// The writable database does not exist, so copy the default to
// the appropriate location.
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath]
stringByAppendingPathComponent:DATABASE_NAME];
success = [fileManager copyItemAtPath:defaultDBPath
toPath:writableDBPath
error:&error];
if(!success)
{
NSFileManager *fileManager = [NSFileManager defaultManager];
// If the expected store doesn't exist, copy the default store.
//if ( ! [fileManager fileExistsAtPath:storePath])
//{
NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"D4" ofType:@"sqlite"];
if ( defaultStorePath )
{
[fileManager copyItemAtPath:defaultStorePath toPath:writableDBPath error:NULL];
}
//}
//NSAssert1(0,@"Failed to create writable database file with Message : '%@'.",
// [error localizedDescription]);
}
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (persistentStoreCoordinator != nil)
{
return persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:DATABASE_NAME];
NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
{
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return persistentStoreCoordinator;
}
Любые идеи?
РЕДАКТИРОВАНИЕ ДОБАВИТЬ:
Когда я исследую iPad с помощью iphone explorer, я вижу исходную заполненную БД в пути приложения, поэтому она копируется.Это значит, что я должен ошибаться.,,
верно?