NSDocumentDirectory или NSBundle resourcePath с Sqlite? - PullRequest
1 голос
/ 09 июля 2011

Мне было интересно, почему мы сначала ищем путь с помощью NSDocumentDirectory:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);  
NSString *documentsDirectory = [paths objectAtIndex:0];  
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"Sports.sqlite"];

, а затем мы сравниваем этот путь с другим путем, используя этот timeourcePath из NSBundle:

NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] 
                                        stringByAppendingPathComponent:@"Sports.sqlite"];  
success = [fileManager copyItemAtPath:defaultDBPath
                               toPath:writableDBPath error:&error];

В чем разница между обоими?

Ответы [ 2 ]

1 голос
/ 09 июля 2011

В этой ситуации вы (обычно только один раз, если вам не нужно восстанавливать базу данных) копируете базу данных из вашего пакета только для чтения в каталог документов, чтобы пользователь мог читать / писать в него. Это полезно, если вы хотите предварительно заполнить базу данных или просто настроить структуру.

Ваш каталог документов доступен для чтения / записи, а ваш bundle не является, поэтому вам нужно иметь sqlite в вашем каталоге documents для его правильного использования.

  1. Первая часть кода просто указывает вам путь, по которому вы хотите, чтобы файл sqlite находился в вашем каталоге documents. Который в конечном итоге удерживается в writableDBPath.

  2. Далее вы получаете путь от вашего bundle (defaultDBPath) и используете эти два пути для

    ... copyItemAtPath:defaultDBPath toPath:writableDBPath ...
    

Это дает вам базу данных для чтения / записи, которую вы предоставляете в своем комплекте. Почему вы делаете это вместо запуска вашего SQL на устройстве для создания схемы? Это позволяет предварительно заполнить базу данных некоторыми данными. Иногда проще использовать графический инструмент для настройки и редактирования файла sqlite

1 голос
/ 09 июля 2011

Что вы имеете в виду, сравнивая два пути?

Я вижу копию файла из каталога ресурсов вашего приложения в каталог пользовательских документов.

Таким образом, происходит то, что версия Sports.sqlite по умолчанию, которая должна быть связана с приложением (и, следовательно, доступна в каталоге ресурсов), копируется в каталог пользователя, где пользователь может ее изменить.

Первый кусок кода просто строит путь назначения (строку); второй блок создает исходный путь (строку), а затем делает копию.

Имеет ли это смысл?

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