Я створюю базу даних і ставлю *.Файл sqlite в папці «Ресурси» в Xcode. Перед відкриттям бази даних я копіюю її в папку документів із ресурсів. Це добре працює на тренажері, але не працює на iPhone. З деяких причин файл баз даних не існує на пристрої iPhone. Це мій код:
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
NSString *databasePath = [documentsDir stringByAppendingPathComponent:databaseFileName];
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL success = [fileManager fileExistsAtPath:databasePath];
if(!success) // all the time it"s YES, even if I delete database
{
// copy database from application folder
NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseFileName];
BOOL fileExists = [fileManager fileExistsAtPath:databasePathFromApp];
if (fileExists) { // It"s NO, for some reasons database does not exist
[fileManager removeItemAtPath:databasePath error:nil];
[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
}
[fileManager release];
}
return databasePath;
З деяких причин цей рядок постійно повертає НІ
BOOL fileExists = [fileManager fileExistsAtPath:databasePathFromApp];
шлях у databasePathFromApp щось подібне
/var/alexander/xxx-xxx-xxx-xxx..../AppName.app/database.sqlite
Питання: чому база даних не існує в ресурсах?
Відповіді:
3 для відповіді № 1Фінал знайшов проблему. Пристрій iPhone дбає про реєстр імен файлів, тому "database.sqlite" і "DataBase.sqlite" - це різні файли для пристрою, але ті самі файли для імітатора. Це так дивно.
Я позував це в блозі Не вдається відкрити файл на пристрої iPhone, але можна в iPhone-симуляторі
0 для відповіді № 2
Видаліть базу даних з ресурсу та додайте її ще раз & Угорі з'являється прапорець "Копіювати елементи" в папку цільової групи.
Очистити цілі та скинути симулятор.