2013-10-08 7 views
0

Я нашел много объяснений и помог здесь, в стеке, но пока не повезло.Основные данные, заполненные в Симуляторе, но не переходящие на устройство

В основном, мой myapp.sqlite (который я предварительно заполнял) отлично работает на симуляторе, но когда я запускаю его на iPad, он пуст.

Таким образом, после попытки различных вещей, это ближе я получил:

  • Я скопировать БД SQLite в Bundle, но я переместить его в папку Library.

На моем AppDelegate я это делаю:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

    NSLog(@"Starting to save the DB to another location"); 

    NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject]; 
    NSString *targetPath = [libraryPath stringByAppendingPathComponent:@"myDB.sqlite"]; 

    if (![[NSFileManager defaultManager] fileExistsAtPath:targetPath]) { 
     // database doesn't exist in your library path... copy it from the bundle 
     NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"myDB" ofType:@"sqlite"]; 
     NSError *error = nil; 

     if (![[NSFileManager defaultManager] copyItemAtPath:sourcePath toPath:targetPath error:&error]) { 
      NSLog(@"Error: %@", error); 
     } 
    } 


    return YES; 
} 

затем на PersistentStoreCoordinator, я делаю это

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

    NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject]; 
    NSString *targetPath = [libraryPath stringByAppendingPathComponent:@"myDB.sqlite"]; 

// NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"naccApp.sqlite"]; 
// NSURL *storeURLLocal = [[NSBundle mainBundle] URLForResource:@"myDB" withExtension:@"sqlite"]; 

    NSURL *storeURL = [NSURL URLWithString:targetPath]; 

    NSError *error = nil; 
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) { 

     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
     abort(); 
    }  

    return _persistentStoreCoordinator; 
} 

Когда я пытаюсь использовать DB, (fetchRequest), я получаю ошибка:

В базе данных CoreData SQL хранятся только URL-адреса файлов поддержки (получены /var/mobile/Applications/2EB2AADD-DF9D-475F-A05E-BB138502471F/Library/myDB.sqlite).

Сообщение ясно, но я пробовал почти всю помощь здесь и до сих пор ничего.

Излишне говорить, что я новичок в Core Data, поэтому, пожалуйста, простите невежество.

О, я использую Xcode 5.

Thx

ответ

4
NSURL *storeURL = [NSURL URLWithString:targetPath]; 

Должно быть:

NSURL *storeURL = [NSURL fileURLWithPath:targetPath]; 

так, что вы создаете файл URL вместо веб-адрес.

+0

Работал ... наконец! Спасибо, что заметили это. – Elkucho

Смежные вопросы