2010-10-11 56 views
2

我可以聲明NSMutableArrayNSArray但我想聲明類數組。讓用戶說是一類,所以我可以聲明數組作爲:如何在目標中聲明類數組c

user* obj[10]; 

它是目標C有效,但我不知道我怎麼能動態設置陣列容量。即我們通常做MutableArray爲initWithCapacity:..

這就是我帶班做:

user* objuser; 
CustomOutput* output = [[CustomOutput alloc] init]; 
[objuser cutomSerialize:output]; 
NSMutableData* data = output.data; 

但如果我有數組:

NSMutableArray* aryUserObj;

我可以」請從arryUserObj調用cutomSerialize方法。

我想將所有的userObj序列化爲一個,並獲得一個NSData對象。

+0

這與「聲明一個類數組」無關(無論這意味着什麼) - 它與您需要某種方式將多個對象對象序列化在一起,這必須是類的實現的一部分通過允許序列化方法逐漸建立序列化的數據,或者通過給該類提供一個方法來獲取一組實例並使用它的序列化邏輯來一次完成它們。 – Chuck 2010-10-11 20:57:33

回答

4

的標準方法來序列化對象的數組是你在你的User對象定義encodeWithCoder:initWithCoder:

@interface User: NSObject { 
.... 
} 
-(void)encodeWithCoder:(NSCoder*)coder ; 
-(id)initWithCoder:(NSCoder*)coder; 
@end 

你現在有什麼CustomSerialize應該是在這些方法中。

然後,如果你要編碼的對象,你做

User* user=... ; 
NSData* data=[NSKeyedArchiver archivedDataWithRootObject:user]; 

,並對其進行解碼:如果你有對象的數組

User* user=[NSKeyedUnarchiver unarchiveObjectWithData:data]; 

NSMutableArray* array=... ; // an array of users 
NSData* data=[NSKeyedArchiver archivedDataWithRootObject:array]; 

NSArray* array=[NSKeyedUnarchiver unarchiveObjectWithData:data]; 

數組迭代自動完成。 還要注意,你不會得到可變數組,它是一個不可變數組。

+0

+1,只是'NSKeyedUnarchiver'不能保持對象的可變性。 IOW,如果你存檔一個'NSMutableArray',你將會得到一個'NSArray'。這有點蹩腳,但事情就是這樣。 – 2010-10-11 21:00:52

+0

你完全正確。糾正。 – Yuji 2010-10-11 22:28:28

2
NSMutableArray * users = [NSMutableArray array]; 
for (int i = 0; i < someNumber; ++i) { 
    User * aUser = [[User alloc] initWithStuff:someStuff]; 
    [users addObject:aUser]; 
    [aUser release]; 
} 
+0

我知道這個......但我不想使用NSMutableArray只需要使用類數組。因爲我必須序列化這個類對象,並且我只能在類中評估序列化方法,而不是從MutableArray中進行評估。例如:obj.serialize(data);這可能只有當我有類obj時纔可能。 – iPhoneDev 2010-10-11 16:45:26

+0

@iPhoneDev你仍然可以迭代數組中的對象並對它們進行序列化,或者你可以實現''協議,然後通過序列化數組來一次序列化所有對象。 – 2010-10-11 16:47:11

+0

是的,我想序列化所有的對象,並將其作爲NSData發送。請讓我知道我們如何使用'NSCoding'來實現此目的。 – iPhoneDev 2010-10-11 16:53:15