0
Objective-Cでオブジェクトをアーカイブする方法はいろいろありますが、Objective-Cのオブジェクトを(他のデータの中でも)txtファイルに格納できる文字列に変換するための方法があります。そのファイルから抽出して、同じオブジェクトインスタンスを効率的に再作成しますか?事前Objective Cオブジェクトインスタンスを文字列としてエンコードするにはどうすればよいですか?
Objective-Cでオブジェクトをアーカイブする方法はいろいろありますが、Objective-Cのオブジェクトを(他のデータの中でも)txtファイルに格納できる文字列に変換するための方法があります。そのファイルから抽出して、同じオブジェクトインスタンスを効率的に再作成しますか?事前Objective Cオブジェクトインスタンスを文字列としてエンコードするにはどうすればよいですか?
で
おかげでこれを行うにはお勧めしません。
なぜオブジェクトをNSDefaultsに保存し、必要に応じてそこから抽出するのですか?それは非常に簡単で効率的です。
ここは例です。 あなたがオブジェクトを保存したいときはいつでも、あなたが行うことができます
#import "User.h"
@implementation User
-(void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:id forKey:@"id"];
[encoder encodeObject:first_name forKey:@"first_name"];
[encoder encodeObject:last_name forKey:@"last_name"];
}
-(id)initWithCoder:(NSCoder *)decoder {
if (self = [super init]) {
self.id = [decoder decodeObjectForKey:@"id"];
self.first_name = [decoder decodeObjectForKey:@"first_name"];
self.last_name = [decoder decodeObjectForKey:@"last_name"];
}
}
- (id)initWith:(User *)obj {
if (self = [super init]) {
self.id = obj.id;
self.first_name = obj.first_name;
self.last_name = obj.last_name;
}
}
@end
User.m
@interface User : NSObject
@property (nonatomic, strong) NSNumber *id;
@property (nonatomic, strong) NSString *first_name;
@property (nonatomic, strong) NSString *last_name;
@end
User.hのは、あなたが
次のように定義されたユーザーオブジェクトがあるとしましょうそのようなもの
//Save the user object
User *user = [[User alloc] init];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:user];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:data forKey:@"YOUR_KEY"];
[defaults synchronize];
//Get the user object
NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"YOUR_KEY"];
User *user = [[User alloc] initWith:[NSKeyedUnarchiver unarchiveObjectWithData:data]];
効率的に実行したい場合は、文字列として格納しないでください。明らかに、あなたは 'NSKeyedArchiver'アーカイブを取り出し、その文字列表現(例えばbase-64)を作成することができます。しかし、それは非常に効率的なアプローチではありません。 – Rob