2016-11-24 6 views
0

Objective-Cでオブジェクトをアーカイブする方法はいろいろありますが、Objective-Cのオブジェクトを(他のデータの中でも)txtファイルに格納できる文字列に変換するための方法があります。そのファイルから抽出して、同じオブジェクトインスタンスを効率的に再作成しますか?事前Objective Cオブジェクトインスタンスを文字列としてエンコードするにはどうすればよいですか?

+4

効率的に実行したい場合は、文字列として格納しないでください。明らかに、あなたは 'NSKeyedArchiver'アーカイブを取り出し、その文字列表現(例えばbase-64)を作成することができます。しかし、それは非常に効率的なアプローチではありません。 – Rob

答えて

0

おかげでこれを行うにはお勧めしません。

なぜオブジェクトを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]]; 
関連する問題