【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

いいなと思ったら応援しよう!