2015-11-13 5 views
0

Я использую XCode 6.4 и iOS Si, mulator iPhone 6. Каждый запуск базы данных или таблицы приложений воссоздается, поэтому я потерял все ранее вставленные данные. У меня есть 1 база данных с 1 столом внутри. Файл базы данных находится в каталоге Supporing Files проекта. Вот код для инициализации базы данных:iOS Simulator воссоздает базу данных sql/таблицу

BOOL success; 
    NSString *databasePath = [[NSBundle mainBundle] pathForResource:@"signals" ofType:@"sql"]; 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    success = [fileManager fileExistsAtPath:databasePath]; 
    if (success) { 
     NSLog(@"exists"); 
     return; 
    } else { 
     NSLog(@"No file found"); 
     [fileManager copyItemAtPath:databasePath toPath:databasePath error:nil]; 
    } 

В перспективе - успех переменный ДА - так я вижу в журналах «существует». После этого я вставляю один элемент в свою таблицу и выбираю запрос, который возвращает этот вставленный raw. При следующем прогоне я должен увидеть две строки, но снова есть только одна строка, поэтому я предполагаю, что таблица была воссоздана. Мне нужна помощь в решении этой проблемы.

+0

Что такое '[FileManager copyItemAtPath: DataBasePath toPath: DataBasePath ошибка: ноль];' должен делать? Вам просто не хватает на копирование файла базы данных из вашего пакета приложений в каталог документов вашего приложения (который выживает при обновлении приложений). – luk2302

ответ

0

Недостаточно репутации для комментариев, но если вы не получаете никаких В вашем журнале нет файлов сообщений, то я не думаю, что это блок кода, вызывающий проблему. Вы определенно делаете запрос Вставить в базу данных, а не Обновление? Кроме того, ваш Выберите запрос, возвращающий все строки, а не один. Вы проезжаете через XCode или прямо в модели Simulator? XCode может перезаписать файлы, если вы используете его только через него - попробуйте повторно запустить приложение в симуляторе (CMD + Сдвиг + H, чтобы добраться до главного экрана), и, видя, если что имеет значение.

+0

Спасибо за ответ! Я просто перезапускаю приложение с симулятора, и все работает нормально. Похоже, XCode виноват. Если вы знаете, как сохранить базу данных для каждого нового запуска XCode, я буду счастлив! Но ты уже много мне помог! Благодарю. –

0

Это не ошибка в симуляторе или в Xcode. В приложении есть ошибка, а не сам симулятор. Вы не должны изменять базу данных по этому адресу:

[[NSBundle mainBundle] pathForResource:@"signals" ofType:@"sql"]; 

Это не является постоянным при обновлении приложения. При обновлении приложения на устройстве вы увидите ту же проблему.

Вместо этого используйте постоянное местоположение, например:

NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documents = [directories firstObject];