之前我使用过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:)
答案 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];