2011-08-31 54 views
0

我有一個2D陣列,在一個或多個路徑定義點:iPad/iPhone的2D陣列系列化

路徑#1 =(1,1)(3,3)(6,6)

路徑#2 =(5,3),(15,5),(16,46)

這裏是我的代碼

NSArray path1 = make array of CGPoints 
NSArray path2 = make array of CGPoints 

NSMutableArray paths = [[NSMutableArray alloc] init]; 
[paths addObject:path1]; 
[paths addObject:path2]; 

問:如何序列化/反序列化此對象嗎?

回答

0

只要陣列中的所有對象都實現了NSCoding協議,大多數默認類都是這樣做的,那麼您應該可以使用NSKeyedArchiver對整個陣列結構進行序列化。

如果歸檔/直接解除存檔到/從一個文件,它應該是這個樣子:

NSString *filename = @"[filename]"; 
[NSKeyedArchiver archiveRootObject:paths toFile:filename]; 
paths = [NSKeyedUnarchiver unarchiveObjectWithFile:filename]; 

如果你只是想原始數據,也許在NSUserDefaults的推或通過網絡進行傳輸,它應該是這個樣子:

NSData *binaryData = [NSKeyedArchiver archivedDataWithRootObject:paths]; 
paths = [NSKeyedUnarchiver unarchiveObjectWithData:binaryData]; 

如果你有這些數組自定義類,你可以自己實現NSCoder,這是乏味的,但並不難。

此外,你可能要小心可變數組和字典。我似乎記得一些有關可變對象在歸檔時變得不可變的內容,所以在開始添加對象之前可能需要檢查。

進一步閱讀:

NSCoder Class Reference

Archives and Serializations Programming Guide