2012-07-10 113 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

相關問題