保存阵列简单方法

时间:2013-06-27 16:37:31

标签: ios nsarray

之前我使用过NSuserDefaults和NSkeyedArchive,但我认为它不适用于我的新项目..

我从JSON获取数据并将其存储在一个数组(名称,年龄,国家)(所有NSString)

我想在详细视图中创建一个保存按钮,以便保存该人的数据。

并在另一个tableview中显示已保存的数据。 (对于数组上的循环并返回所有对象)

我应该如何轻松地处理这个...除了最多40个存储的名称,所以它不那么重......

所以简而言之,我想要一个像你在“家庭应用程序”中看到的功能,你可以“喜欢/存放房子”

- 更新

viewDidLoad中

NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *filePath = [docDir stringByAppendingPathComponent:@"Names.plist"];

NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:filePath];

arrayWithNames = [[NSMutableArray alloc]init];
[arrayWithNames addObjectsFromArray:array];

Savebutton

NSMutableArray *nameInfo = [[NSMutableArray alloc]initWithObjects:self.name,self.age,self.country, nil];

[arrayWithNames addObjectsFromArray:nameInfo];



NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"Names.plist"];


[arrayWithNames writeToFile:path atomically:YES];

这有效,但我将所有数据放在一起,而不是将每个数组作为独立对象

顺便说一下,我确定不能为NULL:)

2 个答案:

答案 0 :(得分:1)

正如您所说,只要所有数据都是NSString值,您就可以使用writeToFile:atomically:将数组保存到文件中。 但是,JSON有时会包含空值,这些空值与该方法不兼容。如果在存在空值时尝试使用该方法,则会引发异常。如果有任何遗失的可能性(并且几乎总有机会),您需要采取一些预防措施。几种可能性:

  • 创建数据的可变副本,运行它,删除空值或用其他内容替换它们(如空字符串)。
  • 通过[NSJSONSerialization dataWithJSONObject:options:error:]将数据转换回JSON,然后将生成的NSData写入文件。

答案 1 :(得分:0)

我不太明白你的问题。

但是在我的情况下,我所做的是创建一个模型,其中包含我打算存储的信息结构(在您的案例中看起来是)并创建了一个数组,其中我将添加对象

可以使用几种情况进行保存,但在我看来,最简单的方法是通过NSUserDefaults(解决方案在很大程度上取决于您的数据库)。

Soo,您将拥有模型

import <Foundation/Foundation.h> 
@interface Person : NSObject


@property(nonatomic,strong) NSString *name;
@property(nonatomic,strong) NSString *country;
@property(nonatomic,strong) NSString *age;
...

使用加密方法:

- (void)encodeWithCoder:(NSCoder *)encoder {
    //Encode properties, other class variables, etc
    [encoder encodeObject:self.name forKey:@"name"];
    [encoder encodeObject:self.age forKey:@"age"];
    [encoder encodeObject:self.country forKey:@"country"];
}

- (id)initWithCoder:(NSCoder *)decoder {
    if((self = [super init])) {
        //decode properties, other class vars
        self.name = [decoder decodeObjectForKey:@"name "];
        self.age = [decoder decodeObjectForKey:@"age"];
        self.country = [decoder decodeObjectForKey:@"country"];

    }
    return self;
}

然后创建一个NSMutableArray,在其中添加对象。

[arrayPeople addObject:person];

当您决定在应用程序数据中存储时,您可以执行以下操作:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

NSData *myEncodedObjectShopping = [NSKeyedArchiver archivedDataWithRootObject:arrayPeople];
[defaults setObject:myEncodedObjectShopping forKey:@"people"];

要检索数据:

NSData *myDecodedObject = [defaults objectForKey:@"people"];
NSMutableArray *decodedArray =[NSKeyedUnarchiver unarchiveObjectWithData: myDecodedObject];
相关问题