我是iOS的新手,我想将NSArray中的值存储到二级存储中以便以后可以访问它。该数组是来自Web服务的大响应,我想解析并显示它,这不是有效的解析数组并存储在sqlite DB中,我想要另外的方法来保存该数组,可能在文本文件中,这样我就无法从文本文件中检索数据并通过我的解析函数解析它。 我们可以这样做吗?
请给我建议
提前致谢!
答案 0 :(得分:2)
要将数组保存到文本文件,您可以使用方法– writeToFile:atomically:
,有关详细信息here是该函数的文档。
答案 1 :(得分:1)
要从NSUserDefaults中检索“yourArray”,您可以在控制器中写入:
-(id) initWithCoder:(NSCoder *)aDecoder{
self = [super initWithCoder:aDecoder];
if (self) {
yourArray = [[NSMutableArray alloc] init];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (! [defaults objectForKey: [NSString stringWithFormat:@"sample"]])
{
//if nothing saved
//... do whatever you want
//Use this array if there is nothing saved
NSLog(@"no saved array");
NSArray *modelArray1 = @[@"New York", @"London", @"Paris"];
yourArray=[modelArray1 mutableCopy];
}
else{
NSLog(@"existing array");
NSData *myDecodedObject = [defaults objectForKey: [NSString stringWithFormat:@"sample"]];
yourArray =[NSKeyedUnarchiver unarchiveObjectWithData: myDecodedObject];
NSLog(@"decode array init=%u", yourArray.count);
}
}
return self;
}
用于保存..
-(void)saving
{
NSUserDefaults *userDefault=[NSUserDefaults standardUserDefaults];
NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:yourArray];
[userDefault setObject:myEncodedObject forKey:[NSString stringWithFormat:@"sample"]];
[userDefault synchronize];
}
答案 2 :(得分:0)
如果数组包含简单对象,则最佳选择为[NSArray writeToFile:atomically:]
。
要获取数组,请使用NSArray的arrayWithContentsOfFile:
(创建并返回一个包含给定路径指定的文件内容的数组。
+(id)arrayWithContentsOfFile:(NSString *)aPath)