2017-08-02 17 views
0

NSMutableArrayに基づいてオブジェクトを保存する方法についてはいくつかの投稿を見てきましたが、それを行う方法は[NSKeyedArchiver]を使用し、NSCoderでエンコードしていますが、私はそれを行う方法を理解するのに苦労しています誰かが助けることを望んでいた。NSUserDefaultsに「カスタムクラスオブジェクト」のNSMutableArrayを保存するにはどうすればいいですか?

Student *student1 = [Student studentWithImage:[UIImage imageNamed:@"default"] withForename:@"John" withSurname:@"Smith" withAddress:@"3 Fake Road, Faketown, FA31 KEE" withDateOfBirth:[dateFormatter dateFromString:@"17-Jul-93"] withAge:24]; 
[studentArray addObject:student1]; 

私はこれと私のNSMutableArraystudentArrayに保存するためにいくつかの他の類似のStudentsをしたいです。この配列をNSUserDefaultsに保存して、再度ロードしてください。

I have seen this post here私の質問に対する正解ですが、私は理解しにくいので、私のコードにそれを実装する助けが必要です! おかげ

+0

アレイ取得Studentクラスでこれを追加userdafaultsにいますか? – KKRocks

+0

@KKRocks thats correct、私は学生の画像、名前、生年月日などのプロパティを含む保存される配列が必要です。 – Manesh

+0

@Maheshは私の答えをチェックし、私が言及したようにあなたのプロパティを追加します。 – KKRocks

答えて

3

まず

- (void)encodeWithCoder:(NSCoder *)coder; 
{ 
    [coder encodeObject:self.Forename forKey:@"keyForename"]; 
    // do same for all property 
} 

- (id)initWithCoder:(NSCoder *)coder; 
{ 
    self = [[Student alloc] init]; 
    if (self != nil) 
    { 
     self.Forename = [coder decodeObjectForKey:@"keyForename"]; 
     // do same other property here 
    } 
    return self; 
} 

ストアアレイ

[studentArray addObject:student1]; 
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:studentArray] forKey:@"mySavedArray"]; 

あなたはstudentArrを保存したい

NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults]; 
NSData *savedArray = [currentDefaults objectForKey:@"mySavedArray"]; 
if (savedArray != nil) 
{ 
     NSArray *oldArray = [NSKeyedUnarchiver unarchiveObjectWithData:savedArray]; 
     if (oldArray != nil) { 
       customObjectArray = [[NSMutableArray alloc] initWithArray:oldArray]; 
     } else { 
       customObjectArray = [[NSMutableArray alloc] init]; 
     } 
} 
+0

これはうまくいっていますが、今私が抱えている唯一の問題はstudentImageが保存されていないことです。私は '[coder encodeObject:self.studentImage forKey:@" keyStudentImage "];'を使用しましたが、配列を読み込むときに画像が読み込まれませんか? – Manesh

+1

私は心配しないで、それを働いてきた: '[コーダーencodeObject:UIImagePNGRepresentation(self.studentImage)forKey: "keyStudentImage" @];' 'encodeWithCoder'と' self.studentImage = [UIImage imageWithDataに:[コーダdecodeObjectForKey:@ "keyStudentImage"]]; '' initWithCoder'にあります。おかげさまでKKRocks – Manesh

関連する問題