【Objective-C】アプリが終了してもデータが保存される方法 NSData型で保存する【Xcode12.2対応】
こういう人向けに発信しています。
・NSUserDefalutsで保存したくない人
・iOS内でデータを永続的に持ちたい人
・アプリが終了してもデータが保存されていて欲しい人。
「オブジェクトアーカイビング」
ファイルとして、ホームディレクトリ以下に保存する事で、
データを永続的に持ちたいと思います。
書き方
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic) NSMutableArray *mutableArray;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
if(!self.mutableArray){
self.mutableArray = @[].mutableCopy;
}
//データの読み込んでいる
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *directory = [paths objectAtIndex:0];
NSString *filePath = [directory stringByAppendingPathComponent:@"nsmutableArray"];
NSData *fileData = [NSData dataWithContentsOfFile:filePath];
if(fileData){
_mutableArray = [NSKeyedUnarchiver unarchiveObjectWithData:fileData];
}
}
- (IBAction)button:(id)sender {
[_mutableArray addObject:@"test"];
//1件追加されたデータを保存している。オブジェクトアーカイビングしている。
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self.mutableArray];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *directory = [paths objectAtIndex:0];
NSString *filePath = [directory stringByAppendingPathComponent:@"nsmutableArray"];
[data writeToFile:filePath atomically:NO];
}
@end