2012-02-18 9 views
3

カスタムクラスのインスタンスで作成されたmainObjectArray(NSMutableArray)があります。各インスタンスはそれ自身が配列であり、各配列のオブジェクトはNSDates、NSStrings、BOOLなどのオブジェクトを含む配列です。私が確立できていない何NSCoder - 複数レベルのネストされた配列を持つ配列のエンコーディング

はそれが可能だかどうかに、

内部 - (無効)encodeWithCoder:(NSCoder *)エンコーダ方式は、ただ言いたいような:

[エンコーダencodeWithObject:mainObjectArray];

または、すべてのオブジェクトをすべてのインスタンスで別々にエンコードする必要がありますか?これは少し痛みがあります...

あなたのお手伝いをさせていただきます。

+0

「各インスタンスはそれ自体が配列です」という意味はどうですか?カスタムクラスインスタンス**に**配列プロパティがあることを意味しますか?それともNSArrayのサブクラスですか? – yuji

+0

申し訳ありませんが不正確です。私のカスタムクラスはNSObjectのサブクラスであり、プロパティとしてNSMutableArray、int、NSString、BOOL&NSDateを持っています。 – Charl

+0

私はこれに非常に似た問題があります。どのように私はそれの中で宣言されたカスタムオブジェクトのNSArrayでオブジェクトを保存するつもりですか? – Stuartsoft

答えて

5

カスタムクラスでエンコードとデコードのメソッドを実装するだけです。それはします。いくつかのサンプル

- (void)encodeWithCoder:(NSCoder *)encoder 
{ 
    [encoder encodeObject:[NSNumber numberWithInt:pageNumber] forKey:@"pageNumber"]; 
    [encoder encodeObject:path forKey:@"path"]; 
    [encoder encodeObject:array forKey:@"array"]; 
} 

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    if(self = [super init]) 
    { 
     self.pageNumber = [[aDecoder decodeObjectForKey:@"pageNumber"] intValue]; 
     self.path = [aDecoder decodeObjectForKey:@"path"]; 
     self.array = [aDecoder decodeObjectForKey:@"array"]; 
    } 
} 

完全に3つのデータ型(int、string、array)が表示されます。

これが役に立ちます。

+0

こんにちはcocoakomali!ご回答いただきありがとうございます。私が理解できないことは、上の例で行ったように配列をエンコードすることができれば、mainObjectArrayで1行のコードでエンコーディングを行うことはできないのですか? – Charl

+0

mainObjectArrayはカスタムクラスから作成されているので、私が行ったようにメソッドを実装する必要があります。 – cocoakomali

+0

私はこれに非常に似た問題があります。どのように私はそれの中で宣言されたカスタムオブジェクトのNSArrayでオブジェクトを保存するつもりですか? – Stuartsoft

関連する問題