2013-08-20 7 views
2

Я добавляю словарь в NSUserDefaults и вызываю метод «synchronize», но когда я закрываю свое приложение и снова открываю его, значения, которые сохраняются в NSUserDefault, равны нулю.NSUserDefaults не сохраняется в симуляторе, хотя я использую синхронизацию

#define kStartTime @"startTime" 
#define kEndTime @"endTime" 
NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; 
NSString *[email protected]"08:00"; 
NSString *[email protected]"18:00"; 
NSDictionary *dict=[[NSDictionary alloc] initWithObjectsAndKeys:startTime,kStartTime, 
          endTime,kEndTime, 
          nil]; 
[defaults registerDefaults:dict]; 
[defaults synchronize]; 

И в методе viewDidLoad я называю это:

NSString *startTimeValue=[defaults stringForKey:kStartTime]; 

startTimeValue по-прежнему нулевой, когда я вновь открыть мое приложение в simulator.Is UserDefaults не может сохранить в Simulator ???

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

После того, как я искал документ с яблоком, я получил это.

registerDefaults:.

Как сказано в документе Apple: добавляет содержимое указанного словаря в домен регистрации.

* Содержимое домена регистрации не записывается на диск; * вам нужно вызывать этот метод каждый раз, когда запускается ваше приложение. Вы можете поместить файл plist в каталог ресурсов приложения и вызвать registerDefaults: с содержимым, которое вы читаете в этом файле.

Так функция registerDefaults: устанавливает значения по умолчанию в приложении, Значение по умолчанию не будет храниться в диске synchronize

+0

проверить мой обновленный ответ ... просто скопируйте его и запустите, чтобы получить значения ... – Jitendra

+0

Попробуйте сохранить весь dict как: [defaults setValue: dict forKey: @ "dictionary"]; и введите его следующим образом: NSMutableDictionary * dict = [[NSMutableDictionary alloc] init]; и dict = [defaults valueForKey: @ "dictionary"]; –

+0

Я только что отредактировал ваш код и отлично его проверил .... – Jitendra

ответ

-1
NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; 
    NSDictionary *dict=[[NSDictionary alloc] initWithObjectsAndKeys:startTime,@"kStartTime", 
         endTime,@"kEndTime", 
         nil]; 
    [defaults registerDefaults:dict]; 
    [defaults synchronize]; 


    NSString *startTimeValue=[defaults stringForKey:@"kStartTime"]; 

    NSLog(@"%@",startTimeValue); 

вам нужно добавить ключи как @ «значение», как это.

Теперь попробуйте этот код ....

+0

Если kEndTime является константой, зачем вам это нужно @ "kEndTime" в качестве ключа? – sbarow

+1

спасибо, но 'kStartTime' является '#define kStartTime @" ### "', и я просто забыл вставить его. Я скоро его отредактирую. – kongkong

+0

@JitendraОтверните этот ответ, который не решает мою проблему. – kongkong

1

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

Когда вы читаете объект из NSUserDefaults и вы ранее не сохранили значение, будет возвращено зарегистрированное значение по умолчанию. Если вы сохранили значение раньше, это значение будет возвращено.

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

Код, который регистрирует значения по умолчанию, должен быть помещен в метод, который выполняется очень рано в жизненном цикле приложения. Я бы рекомендовал использовать application:didFinishLaunchingWithOptions:

Если вы хотите сохранить несколько значений в NSUserDefaults, вам нужно будет использовать несколько вызовов setObject:forKey:.
registerDefaults: не может использоваться для одновременного сохранения нескольких ключей в NSUserDefaults!

+0

Это действительно работает для меня! Я заменяю 'registerDefaults:' на 'SetObject: forKey:'. :) – kongkong

+0

РегистрDefaults может сохранять несколько ключей в NSUserDefaults. Проблема заключается в 'registerDefaults:'. Как сказано в Apple Document: добавляет содержимое указанного словаря в домен регистрации. ** Содержание домена регистрации не записывается на диск; вам нужно вызывать этот метод каждый раз, когда ваше приложение запускается ** – kongkong

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