Проблемы с обновлением базы данных с iPhone - PullRequest
0 голосов
/ 04 октября 2011

Я постараюсь описать мою проблему как можно лучше. Я создал базу данных sqlite с помощью консоли на Mac. Я добавил файл в свой проект, щелкнув правой кнопкой мыши и нажав «Добавить файлы (имя проекта)», и он добавляет базу данных. Я могу прочитать базу данных, однако, когда я пытаюсь обновить базу данных, хотя моя отладка подтвердила, что операторы (операторы обновления) выполнены успешно, данные в базе данных не обновляются. Я понимаю, это потому, что указатель на файл базы данных указывает на файл .sql в моих документах (где находится исходный файл, который я добавил), однако я подумал, добавив файл в проект, копию этот файл будет находиться в папке проекта.

У меня вопрос, как я могу добавить файл .sql в мой проект, если на него нет ссылок с рабочего стола, и иметь возможность обновлять информацию, которая находится в базе данных.

Ответы [ 2 ]

0 голосов
/ 04 октября 2011

Получите путь к каталогу вашего файла SQL в вашем пакете:

NSString *sqlFilePath = [[NSBundle mainBundle] pathForResource:@"YourSQLFileName" ofType:@"sql"];

Затем скопируйте файл sql в каталог песочницы с помощью этой команды:

NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *sandboxDirectoryPath = [documentPaths objectAtIndex:0];
NSString *newSQLFilePath = [NSString stringWithFormat:@"%@/YourSQLFileName.sql", sandboxDirectoryPath];

[[NSFileManager defaultManager] copyItemAtPath:sqlFilePath toPath:newSQLFilePath error:error]
0 голосов
/ 04 октября 2011

Нет, файл находится не на вашем рабочем столе, файл будет упакован в комплект .app.

База данных находится в комплекте приложений, который доступен только для чтения, при первом запуске вам потребуется переместить базу данных в каталог документов.

поместите что-то вроде этого в - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

NSString *documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES) objectAtIndex:0]; 
NSString *sqlFile =[documentDirectory stringByAppendingPathComponent:@"yourdb.sql"];

if (![[NSFileManager defaultManager] fileExistsAtPath:sqlFile]) {
   NSString *bundleSql = [[NSBundle mainBundle] pathForResource:@"yourdb" ofType:@"sql"];

   NSError *error = nil;
   [[NSFileManager defaultManager] copyItemAtPath:bundleSql toPath:sqlFile error:&error];

   if (error) {
      NSLog(@"Could not copy json file: %@", error);
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...