2014-01-09 57 views
1

我試圖刪除我的應用程序使用NSCoding持續存在的所有文件。似乎它應該是一件簡單的事情,但我找不到答案,而我在這裏只顯示一個類,我有幾個,我希望刪除功能保存所有類的所有實例我的應用程序已存檔。我沒有做任何事情不同,以NSCoder:刪除歸檔NSCoding的文件

所以我的接口定義

Details : NSObject <NSCoding> 

我實現了:

- (id)initWithCoder:(NSCoder *)decoder 
{ 
    NSLog(@"initWithCoder 'Details'"); 

    if (self = [super init]) 
    { 
     NSLog(@"Decoding 'Details'"); 

     self.name = [decoder decodeObjectForKey:@"name"]; 
    } 

    return self; 
} 

- (void)encodeWithCoder:(NSCoder *)encoder 
{ 
    NSLog(@"Encoding 'Details'"); 
    [encoder encodeObject:self.name forKey:@"name"]; 
} 

當我寫我使用:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:object]; 
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults]; 
[userDefaults setObject:data forKey:identifier]; 

我的確開始嘗試查看文檔目錄,但我認爲正如我正在撰寫本文和從我的研究它會被寫入NSUserDefaults(這可能不是最好的)。所以在提出兩個問題的風險中,我該如何刪除所有使用NSCoder保存/存檔到NSUserDefaults的對象(並且可能需要將其設置爲其他內容(即文檔文件夾內的子文件夾...) 。如果是的,我該怎麼做)。

+1

這些數據項有多大?你可能不應該使用'NSUserDefaults'。 – Wain

+0

@不是很大 - 小數據類,大多數可能是5或6個NSString屬性,但有時這些數據類在NSArray中可能是20個左右。猜測NSUserDefaults不會是他們最好的地方嗎? –

回答

4

NSCoding提供了一種變換物體進入NSData便於存檔。你們這些NSData對象做什麼以後是你的責任,你可能會或可能不會將它們保存到單個文件但NSCoding是沒有意識到。

好像你一直在使用[userDefaults setObject:data forKey:identifier]; 您傾銷那些NSDataNSUserDefaults需要刪除您使用[userDefaults removeObjectForKey:identifier];時使用的每個identifier的所有條目。 您無法自動確定這些條目是什麼。

此外,你可能要考慮不佔用NSUserDefaults並將它們保存到單個文件。 (看看[NSData writeToFile:])這還會幫助你跟蹤這些文件的內容(例如,你可以將它們放在同一個文件夾/子文件夾中)。