0

私はここで困惑しています。NSNumbersまたはNSStringsのいずれかが入力されたNSArrayをNSUserDefaultsに保存しようとしています。奇妙なことに、読む直前に保存すると機能しますが、保存せずに読んだ場合(前回の起動時に保存した後)はゼロになります。XCodeでRun(Command-R)を押すたびに、デフォルトが消去されているようです。

NSArray *arrayToSave = [NSArray arrayWithObjects: [NSNumber numberWithInt:1], [NSNumber numberWithInt:2], [NSNumber numberWithInt:3], nil];
[[NSUserDefaults standardUserDefaults] setObject:arrayToSave forKey:@"TestKey"];  //if I comment this line arrayRead will be nil even after I had saved it with this line on a prior run

それを読んで:

NSArray *arrayRead = [[NSUserDefaults standardUserDefaults] objectForKey: @"TestKey"];
NSLog(@"arrayRead: %@", arrayRead);
4

2 に答える 2

2

synchronizeユーザーのデフォルトに書き込んだ後に呼び出す必要があります。

// Write
NSArray *arrayToSave = [NSArray arrayWithObjects: [NSNumber numberWithInt:1], [NSNumber numberWithInt:2], [NSNumber numberWithInt:3], nil];
[[NSUserDefaults standardUserDefaults] setObject:arrayToSave forKey:@"TestKey"];
[[NSUserDefaults standardUserDefaults] synchronize];

// Read
NSArray *arrayRead = [[NSUserDefaults standardUserDefaults] objectForKey:@"TestKey"]; // or arrayForKey
NSLog(@"arrayRead: %@", arrayRead);
于 2012-05-01T09:49:08.397 に答える
0

次のことを試してください。

保存する:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSMutableArray *arr = ... ; // set value 
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:arr]; 
[defaults setObject:data forKey:@"TestKey"]; 

ロード:

 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSData *data = [defaults objectForKey:@"TestKey"]; 
    NSArray *arr = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 
于 2012-05-01T09:40:16.267 に答える