2012-09-11 55 views
0

因此,我意識到我需要使用NSCoding將自定義對象保存到plist。使用NSCoder將自定義對象保存到plist中

我正在努力的部分正是我在執行initWithCoderencodeWithCoder方法後做的。他們分別返回idvoid,所以如果他們已經將我的對象轉換爲NSData或他們對他們做了什麼,數據在哪裏,那麼我可以保存它?

我有方法的建立正是如此:

- (id)initWithCoder:(NSCoder *)decoder { // Decode 
    if (self = [super init]) { 
     self.name = [decoder decodeObjectForKey:@"gameName"]; 
     self.genre = [decoder decodeObjectForKey:@"gameGenre"]; 
     self.rating = [decoder decodeObjectForKey:@"gameRating"]; 
    } 
    return self; 
} 

- (void)encodeWithCoder:(NSCoder *)encoder { // Encode 
    [encoder encodeObject:self.name forKey:@"gameName"]; 
    [encoder encodeObject:self.genre forKey:@"gameGenre"]; 
    [encoder encodeObject:self.rating forKey:@"gameRating"]; 
} 

試圖找出下一個步驟是獲得保存到的.plist這些對象(這已經是一個NSMutableArray),並回顧時再 - 打開應用程序。

任何幫助表示讚賞!

回答

1

那麼,這取決於你想要做什麼。有可能NSKeyedArchiver就足夠了。考慮:

+ (NSData *)archivedDataWithRootObject:(id)rootObject 
+ (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path 

它接受一個對象圖的一個根對象並且用串行化的數據創建一個NSData對象,或將數據串行化到一個文件。

然後看NSKeyedUnarchiver它有這些:

+ (id)unarchiveObjectWithData:(NSData *)data 
+ (id)unarchiveObjectWithFile:(NSString *)path 

我敢肯定,將讓你在你對你的目標的方式。

編輯

試圖當我打一個錯誤(我認爲)告訴它我 希望它寫一個陣列。在此行上獲取「預期標識符」: [rootObject setValue:[self.dataController.masterGameList] forKey:@「games」]; - lukech

這是一個KVC API。存檔/解除存檔方法是類方法,所以你只需保存你的整個對象圖有:

if (![NSKeyedArchiver archiveRootObject:self.dataController.masterGameList 
           toFile:myPlistFile]) { 
    // Handle error 
} 

,然後您加載它:

self.dataController.masterGameList = 
    [NSKeyedUnarchiver unarchiveObjectWithFile:myPlistFile]; 
+0

努力(我認爲)告訴它我想它寫一個數組的時候我打一個錯誤。在此行上獲取「預期標識符」: '[rootObject setValue:[self.dataController.masterGameList] forKey:@「games」];' – Luke

+0

'self.dataController.masterGameList'是您的對象圖的根對象想堅持下去?如果是這樣,那麼你將存檔該對象,例如'NSData * archivedData = [NSKeyedArchiver archivedDataWithRootObject:self.dataController。masterGameList];' – FluffulousChimp

0

您需要根對象上實現NSKeyedArchiver保存對象圖,然後用NSKeyedUnarchiver重新構建對象圖。

this tutorial

+0

本教程以Mac的東西爲中心而不是iOS,但是當試圖(我想)告訴它我想要寫它的數組時,我遇到了一個錯誤。在此行上獲取「預期標識符」: '[rootObject setValue:[self.dataController.masterGameList] forKey:@「games」];'' – Luke

相關問題