我發現一個替代方案,在保存之前,我使用NSKeyedArchiver
編碼根對象(NSArray
對象),以NSData
結尾。然後使用UserDefaults保存NSData
。
當我需要數據時,我讀出NSData
,並使用NSKeyedUnarchiver
將NSData
轉換回對象。
這是一個有點麻煩,因爲我需要每次轉換/從NSData
,但它只是工作。
這裏是每個請求一個例子:
節省:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *arr = ... ; // set value
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:arr];
[defaults setObject:data forKey:@"theKey"];
[defaults synchronize];
負載:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:@"theKey"];
NSArray *arr = [NSKeyedUnarchiver unarchiveObjectWithData:data];
數組中的元素實現
@interface CommentItem : NSObject<NSCoding> {
NSString *value;
}
然後,在實施的CommentItem
,提供了兩種方法:
-(void)encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject:value forKey:@"Value"];
}
-(id)initWithCoder:(NSCoder *)decoder
{
self.value = [decoder decodeObjectForKey:@"Value"];
return self;
}
任何人都有更好的解決方案嗎?
謝謝大家。
鍵是NSString。但值是NSArray,其元素是一個實現NSCoding的定製類。看起來解決方案不工作,因爲UserDefaults只支持6種類型,不考慮NSCoding。 – BlueDolphin 2009-01-23 21:11:10