2010-08-10 4 views
-1

Я знаю, что NSUserDefaults может читать ключ и значение из файла plist. Можно ли прочитать структуру ключа?Можно ли прочитать структуру файла plist?

Например:

'Count' ключ является целым числом и имеет опцию 1,2,3,4,5

коды ниже может получить значение 'Count'

NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; 

if([defaults objectForKey:@"Count"]!=nil) 
{ 

    NSString *s=[[NSString alloc] initWithString: [defaults objectForKey:@"Count"]]; 
    NSInteger v=[s intValue]; 
    [s release]; 
} 

Но я предпочитаю получать все опции и хранить NSArray или лучшую структуру хранения.

Возможно ли это?

+1

Вы хотите, чтобы вы читали возможные значения для параметра PSMultiValueSpecifier из настроек Settings.bundle вашего приложения? – Vladimir

ответ

1

Я прочитал Bundle настроек следующим образом:

// Get path to Root.plist file in settings bundle and retrieving its contents 
NSString* tPath = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"]; 
settingsBundle = [[NSBundle bundleWithPath:tPath] retain]; 
NSDictionary* tSetDict = [NSDictionary dictionaryWithContentsOfFile:[tPath stringByAppendingPathComponent:@"Root.plist"]]; 

// Get array of preference dictionaries 
NSArray* prefs = [tSetDict objectForKey:@"PreferenceSpecifiers"]; 

// Iterate through dictionaries to find required value 
for (NSDictionary* setDict in prefs){ 
    NSString* type = [setDict objectForKey:@"Type"]; 
    if (![type isEqualToString:@"PSMultiValueSpecifier"]){ 
     // Get possible preference values for PSMultiValueSpecifier case 
     // You may need to know value type in advance - not sure about that 
     NSArray* values = [setDict objectForKey:@"Values"]; 
    } 
} 
1

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

Система по умолчанию не является средством чтения файлов plist, это больше API для доступа к базе данных, поддерживаемой самой ОС. Несмотря на это, вы мало что видите на iPhone, это на самом деле очень большая и сложная система управления предпочтениями не только для отдельных приложений, но и для пользователей, групп пользователей, компьютеров и сетей. Это кажется тривиальным в iOS, потому что у вас нет гибкости конфигурации и использования, которые у вас есть на MacOS.

Невозможно прочитать все значения по умолчанию, поскольку они огромны и намного больше, чем вы ожидали бы даже на iOS.

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

NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; 
NSInteger v=[defaults integerForKey:@"Count"]; 

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

Смежные вопросы