Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将NSArray保存到NSUserDefaults问题(使用数组中的自定义对象)_Ios_Nsuserdefaults - Fatal编程技术网

Ios 将NSArray保存到NSUserDefaults问题(使用数组中的自定义对象)

Ios 将NSArray保存到NSUserDefaults问题(使用数组中的自定义对象),ios,nsuserdefaults,Ios,Nsuserdefaults,我尝试将对象保存到NSUserDefaults。但是当我再次调用这个方法时,它并没有关于以前操作的任何信息 我的方法如下: - (void)addToCart { if([[NSUserDefaults standardUserDefaults] objectForKey:kCart]) { NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; NSMutableArray *prod

我尝试将对象保存到
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并保存它,但它不起作用。

您需要遵守
协议,并在自定义对象中实现
-initWithCoder:
-encodeWithCoder:


请参阅:

您需要遵守
协议,并在自定义对象中实现
-initWithCoder:
-encodeWithCoder:


请参阅:

放入
nsserdefaults
的所有内容必须是有效的属性列表对象(
NSData
NSString
NSNumber
NSDate
NSArray
NSDictionary
)。所有集合元素本身也必须是属性列表对象

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

序列化到
NSData
NSKeyedArchiver
处理。有关这方面的规范示例,请参见。(该文档非常旧,仍然引用了
NSArchiver
,它可以很好地解决此问题,但是
NSKeyedArchiver
现在是首选的序列化程序。)


为了使用
NSKeyedArchiver
进行归档,您的对象必须符合@harakiri所述的
NSCoding

放入
NSUserDefaults
的所有内容都必须是有效的属性列表对象(
NSData
NSString
NSNumber
NSDate
NSArray
,或
NSDictionary
)。所有集合元素本身也必须是属性列表对象

要将非PL对象保存到
NSUserDefaults
,必须首先将该对象转换为PL对象。最常用的方法是将其序列化为
NSData

使用
NSKeyedArchiver
处理序列化到
NSData
的操作。有关此操作的规范示例,请参阅。(该文档非常旧,仍然引用了
NSArchiver
,这对解决此问题很有效,但
NSKeyedArchiver
现在是首选序列化程序。)

为了使用
NSKeyedArchiver
进行归档,您的对象必须符合@harakiri所述的
NSCoding