2012-01-04 5 views
0

Я разрабатываю приложение для какао. Я создал объект пользователя по умолчанию с этим кодом:Пустое значение в NSUserDefaults

NSUserDefaults *standard_user_defaults = [NSUserDefaults standardUserDefaults]; 

if (standard_user_defaults) { 
    [standard_user_defaults setObject:myString forKey:key]; 
    [standard_user_defaults synchronize]; 
} 

И потом, я получаю значение с помощью этого кода:

NSUserDefaults *standard_user_defaults = [NSUserDefaults standardUserDefaults]; 
NSString *val = nil; 

if (standard_user_defaults) 
    val = [standard_user_defaults objectForKey:key]; 

Проблема заключается в том, что если я запускаю это приложение в моем компьютере работает отлично, и я могу получить значение по умолчанию для пользователя, но если другой человек запускает приложение, получает пустое значение. Есть идеи?

+0

* Любой * другой человек? Они делают что-то по-другому или работают на чем-то другом? –

ответ

0

Я предполагаю, что «другой человек» означает другого пользователя на вашем компьютере. Причина, по которой они не могут прочитать то, что вы написали для своих пользовательских настроек по умолчанию, заключается в том, что NSUserDefaults предназначен для пользователя -специфические значения. Чтобы сохранить то, что ваше приложение сможет получить как из вашей учетной записи, так и из других, вам нужно поместить его в файл, хранящийся где-то в общем месте в системе. Один из способов сделать это будет примерно так:

NSString *basePath = [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSLocalDomainMask, YES) objectAtIndex:0]; 
NSString *filePath = [basePath stringByAppendingPathComponent:@"someFileName"]; 

// write: 
NSDictionary *dataToSave = [NSDictionary dictionaryWithObjectsAndKeys:theValue, @"someKey", nil]; 
if(filePath && [dataToSave writeToFile:filePath atomically:YES]) 
{ 
    // success! 
} 

// read: 
NSDictionary *dataToLoad = [NSDictionary dictionaryWithContentsOfFile:filePath]; 
if(dataToLoad) 
{ 
    // success! 
    NSString *theValue = [dataToLoad objectForKey:@"someKey"]; 
} 
0

Вам следует попытаться использовать valueForKey, а не objectForKey. Глядя на ваш код, нет причин, по которым он не должен работать ни на одного человека, ни на другого.

Единственное исключение - если вы используете настройки по умолчанию из settings.bundle. Значения, сохраненные в settings.bundle для пользовательских значений по умолчанию, не инициализируются до тех пор, пока пользователь не откроет страницу настроек в первый раз.

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