単純データストア
3083 ワード
iOSの開発では、ユーザーのデータを記憶する必要があり、次回の使用に便利であるため、データ記憶方法を用いる必要がある.
メリット:ストレージパスを手動で管理し、システムの削除を避けることができます.
欠点:アクセスが煩雑で、オブジェクトを格納できない.
保存:
取得:
メリット:ストレージパスに関心を持つ必要はありません.
欠点:システム管理、プログラム猿は手動で管理できず、オブジェクトを保存できない
保存:
**取:**
メリット:任意のコンテンツを格納、パスを手動で管理できる.
欠点:多くの方法を実現する必要があり、比較的煩雑である.
保存:
1.ストレージをクリックすると、配列データがアーカイブされます.
2.モデルクラスでencodeWithCoderを書き換える:およびinitWithCoder:メソッドアーカイブとアーカイブを必要とするモデル属性にアーカイブとアーカイブを設定する
アクセス方法の実装:
3.配列リロード方法でアーカイブ解除後のデータを読み込む
取得:
1.plistストレージ
メリット:ストレージパスを手動で管理し、システムの削除を避けることができます.
欠点:アクセスが煩雑で、オブジェクトを格納できない.
保存:
//
NSArray *arr = @[@123,@"dl"];
//
NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
//
path = [path stringByAppendingPathComponent:@"arr.pilst"];
//
[arr writeToFile:path atomically:YES];
取得:
//
NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
//
path = [path stringByAppendingPathComponent:@"arr.pilst"];
//
[NSArray arrayWithContentsOfFile:path];
2.設定記憶
メリット:ストレージパスに関心を持つ必要はありません.
欠点:システム管理、プログラム猿は手動で管理できず、オブジェクトを保存できない
保存:
//
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//
[defaults setObject:name forKey:@"name"];
**取:**
//
NSString *name = [[NSUserDefaults standardUserDefaults] objectForKey:@"name"];
3.カスタムオブジェクトストレージ
メリット:任意のコンテンツを格納、パスを手動で管理できる.
欠点:多くの方法を実現する必要があり、比較的煩雑である.
保存:
1.ストレージをクリックすると、配列データがアーカイブされます.
//
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
AddViewController *vc = segue.destinationViewController;
vc.block = ^(DLContact *contact){
[_contacts addObject:contact];
//
NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:@"contact.data"];
NSLog(@"%@",path);
//
[NSKeyedArchiver archiveRootObject:_contacts toFile:path];
[self.tableView reloadData];
};
}
2.モデルクラスでencodeWithCoderを書き換える:およびinitWithCoder:メソッドアーカイブとアーカイブを必要とするモデル属性にアーカイブとアーカイブを設定する
アクセス方法の実装:
// key
- (void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:_name forKey:@"name"];
[aCoder encodeObject:_phone forKey:@"phone"];
}
// key
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{//
if (self = [super init]) {
_name = [aDecoder decodeObjectForKey:@"name"];
_phone = [aDecoder decodeObjectForKey:@"phone"];
}
return self;
}
3.配列リロード方法でアーカイブ解除後のデータを読み込む
取得:
- (NSMutableArray *)contacts{
//
if (_contacts == nil) {
//
NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:@"contact.data"];
//
_contacts = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
//
if (_contacts == nil) {
//
_contacts = [NSMutableArray array];
}
}
return _contacts;
}
: , !
Tips: block .