2012-07-10 111 views
2

我尝试将我的对象保存到NSUserDefaults。但是当我再次调用这个方法时,它没有关于以前操作的任何信息。将NSArray保存为NSUserDefaults问题(使用数组中的自定义对象)

下面有我的方法:

- (void)addToCart { 
    if([[NSUserDefaults standardUserDefaults] objectForKey:kCart]) { 
     NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
     NSMutableArray *products = [[NSMutableArray alloc] initWithArray:[prefs objectForKey:kCart]]; 
     [products addObject:self.product]; 
     [prefs setObject:products forKey:kCart]; 
     [prefs synchronize]; 
     [products release]; 
    } 
    else { 
     //Saving...   
     NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
     [prefs setObject:[NSArray arrayWithObjects:self.product, nil] forKey:kCart]; 
     [prefs synchronize]; 
    } 
} 

我需要保存一个集合与产品NSUserDefault。我将我的对象包装到NSArray并保存它,但它不起作用。

回答

2

一切投入NSUserDefaults必须是一个有效的属性列表对象(NSDataNSStringNSNumberNSDateNSArray,或者NSDictionary)。所有收集元素本身也必须是属性列表对象。

为了将非PL对象保存到NSUserDefaults中,您必须先将对象转换为PL对象。最通用的方法是将其序列化为NSData

序列化到NSDataNSKeyedArchiver处理。请参阅Storing NSColor in User Defaults,以了解其中的典型示例。 (该文件是很旧,仍引用NSArchiver将工作的优良这个问题,但现在NSKeyedArchiver是首选的串行器。)

为了使用NSKeyedArchiver存档,由@harakiri注意你的对象必须符合NSCoding

相关问题