爲了使NSDictionary
成功保存,它保存的所有對象必須符合NSCoding protocol。
總之這意味着你必須實現
- (void)encodeWithCoder:(NSCoder *)encoder
和
- (id)initWithCoder:(NSCoder *)decoder
你所有的自定義類。
一個很好的教程是在這裏:http://www.raywenderlich.com/1914/nscoding-tutorial-for-ios-how-to-save-your-app-data
編輯:
一旦你寫你NSCoder
方法,你可以保存這樣的數據:
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:self];
[archiver finishEncoding];
[data writeToFile:file atomically:YES];
和init從文件的對象像這樣:
NSData *data = [[NSData alloc] initWithContentsOfFile:file];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
self = [unarchiver decodeObject];
[unarchiver finishDecoding];
您確實提到了json對象的問題:有關json對象的事情是,首先您必須檢查它的類型:它可以是NSDictionary
或NSArray
- 取決於輸入和格式。
當你只有一個元素的數組 - 你正在尋找的字典時遇到常見問題。如果您的字典{...}
json表示被嵌入[]
內,就會發生這種情況。
字典中的對象必須符合[協議](https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/Protocols/NSCoding_Protocol/Reference/Reference.html),所以它們可以(德)序列化 –
謝謝!我知道現在的錯誤在哪裏。 – bohan
我正在尋找如何實現這一點。 – bohan