2016-07-31 16 views
-1

私のプロジェクトでは、UIImage、NSMutableArray、およびNSStringオブジェクトを持つカスタムオブジェクト(Person)を保存する必要があります。現在、NSStringオブジェクトをエンコードしてデコードし、NSUserDefaultにPersonをアーカイブすることができます。すべてUIImageとNSArrayを除いて正常に動作します。UIImageとNSMutableArrayを含むNSUserDefaultにカスタムオブジェクトを保存するにはどうすればいいですか?

-(instancetype)initWithCoder:(NSCoder *)aDecoder 
{ 
    if (self = [super init]) { 
    self.userName = [aDecoder decodeObjectForKey:@"userName"]; //NSString 
    self.profileImage = [aDecoder decodeObjectForKey:@"profileImage"]; //UIImage 
    self.uplodedVideoArray = [aDecoder decodeObjectForKey:@"uplodedVideoArray"]; //NSMutableArray 
    } 
return self; 
} 

-(void)encodeWithCoder:(NSCoder *)aCoder 
{ 
[aCoder encodeObject:self.userName forKey:@"userName"]; //NSString 
[aCoder encodeObject:self.profileImage forKey:@"profileImage"]; //UIImage 
[aCoder encodeObject:self.uplodedVideoArray forKey:@"uplodedVideoArray"]; //NSMutableArray 
} 

-(void)archivePerson 
{ 
NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:[Person sharedInstance]]; 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setObject:encodedObject forKey:@"Person"]; 
[defaults synchronize]; 
} 

-(Person *)unarchivePerson 
{ 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSData *encodedObject = [defaults objectForKey:@"Person"]; 
Person *person = [NSKeyedUnarchiver unarchiveObjectWithData:encodedObject]; 
return person; 
}  
+0

実際、UIImageを保存することは私の懸念事項ではありません。カスタムオブジェクトをNSUserDefaultに保存します。実際に私はそれをやった。すべてのNSStringプロパティは期待どおりに動作していますが、カスタムオブジェクトを展開すると画像が取得できません。 – Rokon

答えて

0

特定のタイプのオブジェクトは、plistファイルに書き込むことができる同じタイプのNSUserDefaultsにのみ保存できます。 (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/PropertyLists/AboutPropertyLists/AboutPropertyLists.htmlを参照してください) ここに画像を保存することはできません。配列に問題がある理由は、コレクション(配列/辞書)がplist互換オブジェクトのみを含んでいればplist互換性があるということです。あなたの最善のアプローチは、あなたのイメージ/ビデオファイルを別々に保存して、NSUserDefaultsにURL(String/NSStringとして)を書き込むことです。最高

関連する問題