Как добавить файлы в папку ресурсов в XCode? - PullRequest
5 голосов
/ 17 февраля 2011

Я хочу добавить базу данных sqlite в XCode 4 (также относится и к XCode 3).В учебных руководствах указывается добавление файла .db в папку ресурсов, и я полагаю, что это будет скопировано в ~ / Library / Application Support / iPhone Simulator / 4.2 / Applications / {some-id} / Documents / во время сборки гдевы можете найти файл с помощью NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) и т. д.

Однако в XCode 4 нет папки с видимыми ресурсами.

Я попытался добавить файл с помощью команды Добавить файл ...и затем он появляется в Targets> AppName> Copy Bundle Resources, но всегда в папке вышеупомянутых документов появляется пустой файл .db (который я затем вручную заменяю - очевидно, не правильный подход!)

(из-зак природе данных я придерживаюсь sqlite поверх CoreData)

Ответы [ 2 ]

11 голосов
/ 17 февраля 2011

Вы должны начать добавлять свою базу данных в свой проект xcode, чтобы он был добавлен в папку вашего пакета, где вы можете найти его по коду:

[NSBundle mainBundle]

Это единственная папка, где вы можетедобавляйте файлы через xcode, когда вы «строите» свое приложение (в конце концов, с подпапками, но не «системными» папками как «документы»), теперь вам просто нужно помнить, что основная папка пакета просто «только для чтения», поэтому вы не можетеиспользуйте там свою базу данных с правами записи.Таким образом, обычный способ:

1) когда вы хотите использовать свою БД, проверьте с помощью кода, существует ли он в папке app: documents.Конечно, в первый раз это не так, поэтому

2) скопируйте его из основного пакета

- (BOOL)transferDb {
    NSError **error;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"yourData.db"]; 

    NSFileManager *fileManager = [NSFileManager defaultManager];

    if (![fileManager fileExistsAtPath: path])
    {
        NSString *bundle =  [[ NSBundle mainBundle] pathForResource:@"preferenze" ofType:@"plist"];
        [fileManager copyItemAtPath:bundle toPath:path error:error];
        return YES;
    }
    return NO;
}

3) используйте его (r / w) в папке документов

ps: и (конечно) имейте в виду, что когда вы используете / редактируете / пишете БД в iPhone / симуляторе, возможно, добавляете записи, одна из которых в основном комплекте и, конечно, та, что в вашем mac / проекте, выиграла 'Обновление не приведет к добавлению записей, поэтому, если по какой-либо причине вы удалите свое приложение на iPhone / симуляторе (или «очистите все цели» с помощью меню «build» xCode), метод check / copy скопирует «virgin»."снова скопируйте в папку с документами, так что вы потеряете все свои изменения ...

2 голосов
/ 23 апреля 2012

Будьте осторожны с объемом данных, которые вы помещаете в папку «Документы», это предназначено для пользовательских данных, и поскольку эти данные будут резервироваться с помощью iCloud, компания Apple ограничила объем данных, которые приложение может хранить и использовать в документах.папка.

Моему приложению было отказано в использовании базы данных SQLite 6 МБ.Вместо этого скопируйте его в каталог caches: NSCachesDirectory.

Или запретите резервное копирование файла: https://developer.apple.com/library/ios/#qa/qa1719/_index.html

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