iOS 初心者です. NSArray の値をセカンダリ ストレージに保存して後でアクセスできるようにしたいです. 配列は Web サービスからの大きな応答です. 解析して表示したいです. 配列を解析するのは効率的ではありません.そしてsqlite DBに保存します。その配列を保存する別の方法が必要です。テキストファイルにある可能性があるため、テキストファイルからデータを取得して解析関数で解析することはできません。私たちはそれを行うことができますか?
提案をお願いします
前もって感謝します !
配列をテキスト ファイルに保存するには、メソッドを使用できます。– writeToFile:atomically:詳細については、関数のドキュメントを参照してください。
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];
}
最良の選択は[NSArray writeToFile:atomically:]、配列に単純なオブジェクトが含まれている場合です。配列を取得するには、NSArray を使用arrayWithContentsOfFile:します (指定されたパスで指定されたファイルの内容を含む配列を作成して返します。 + (id)arrayWithContentsOfFile:(NSString *)aPath)