Как поделиться настройками через NSUserDefaults для инструментов командной строки? - PullRequest
2 голосов
/ 15 апреля 2011

Я хочу, чтобы полдюжины инструментов командной строки (используемых для тестирования) имели общий идентификатор пакета, чтобы они могли совместно использовать подпапку NSUserDefaults и Library / Caches. Я мог бы обойти подпапку Library / Caches, используя жестко запрограммированную строку, но как я могу установить файл, в который NSUserDefaults сохраняет?

В комплекте приложений оно устанавливается по идентификатору пакета в Info.plist. Но как я могу установить идентификатор пакета для набора инструментов командной строки, у которых нет Info.plist?

1 Ответ

6 голосов
/ 15 апреля 2011

Создайте экземпляр NSUserDefaults с +alloc & -init вместо использования +standardUserDefaults.Созданный таким образом экземпляр пользователя по умолчанию не будет создан с доменом по умолчанию, соответствующим идентификатору основного пакета, поэтому вам нужно использовать метод -addSuiteNamed:, чтобы вручную добавить к нему домен по умолчанию.

( Обновление ) Извините, мой плохой!Наборы являются нестабильными, а не постоянными - полезны для инструментов, которым необходимо считывать общий набор значений по умолчанию, не так много для приложения, которое хочет установить значение по умолчанию.Для последнего взгляните на -setPersistentDomain:forName:.Ключи в словаре домена определяют, какие ключи принадлежат указанному домену по умолчанию, а значения предоставляют свои значения по умолчанию.

Вот краткий пример, который должен создать ~ / Library / Defaults / com.shermpendley.DefaultsTest.plist и сохраните в нем указанную пару ключ / значение:

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSUserDefaults *defaults = [[NSUserDefaults alloc] init];
    [defaults setPersistentDomain:[NSDictionary dictionaryWithObject:@"Hello" forKey:@"World"] forName:@"com.shermpendley.DefaultsTest"];
    [defaults synchronize];
    [defaults release];

    [pool drain];
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...