0

我遇到了如下所示的代码。在下面的代码中,我只能保存一个注释,但是我有一组注释,我无法用单个 NSUserDefaults 保存它们

  To save:

    NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
    [ud setDouble:location.latitude forKey:@"savedCoordinate-latitude"];
    [ud setDouble:location.longitude forKey:@"savedCoordinate-longitude"];
    [ud setBool:YES forKey:@"savedCoordinate-exists"];
    [ud synchronize];

编辑:

 -(void)viewDidLoad
        NSUserDefaults *ud=[NSUserDefaults standardUserDefaults];
            if([ud boolForKey:@"save-exist"])
            { NSMutableArray *udAnnotations=[[NSMutableArray alloc]initWithArray:
[ud objectForKey:@"annotationsArray"]];
                NSLog(@"%d",[udAnnotations count]);
            }
            else{
            [self addAnno];
            }

    -(void)addAnno
    {

    [mapView addAnnotations:annotationArray];
    NSUserDefaults *ud=[NSUserDefaults standardUserDefaults];
    [ud setObject:annotationArray forKey:@"annotationsArray"];
    [ud setBool:YES forKey:@"save-exist"];
    [ud synchronize];

}
4

1 回答 1

1

由于您已经有一个数组,只需使用setObject:forKey:arrayForKey:

由于原始数组中的对象不是可以直接保存的类型,因此将它们的数据存储在字典中:

NSMutableArray *saveData = [[NSMutableArray alloc] initWithCapacity:originalData.count];
for(id location in originalData) {
    [saveData addObject:@{@"lat":[location latitude], @"lon":[location longitude]}];
}
[[NSUserDefaults standardUserDefaults] setObject:saveData forKey:@"annotationsArray"];

并在检索时转换:

NSMutableArray *restoredData = [[NSMutableArray alloc] init];
for(NSDictionary *data in [[NSUserDefaults standardUserDefaults] arrayForKey:@"annotationsArray"]) {
    [restoredData addObject:[[Location alloc] initWithLat:data[@"lat"] andLon:data[@"lon"]]];
}
// if restoredData.count is 0, there were no stored objects.

几点注意事项:

  • 如果您不使用 ARC,请记住释放分配的对象。
  • 这使用了新的objective c 对象文字语法和字典访问语法。如果您不使用 xcode 4.5,则需要以传统方式构建和访问它们,dictionaryWithObjectsAndKeys:并且objectForKey:
于 2012-10-04T02:51:25.733 回答