gpt4 book ai didi

iphone - 使用 NSUserDefaults 保存 NSMutableArray 不起作用

转载 作者:可可西里 更新时间:2023-11-01 03:30:14 27 4
gpt4 key购买 nike

我有一个名为 myWallet 的可变数组及其属性声明:

@property (nonatomic, strong) NSMutableArray *myWallet;

这个数组被 Cards 填充,它是一个对象。我从另一个 View Controller 创建了一个 Card 的新实例,因此我使用委托(delegate)方法能够将这个创建的卡片传递到我的初始 View Controller(一个 Table View Controller)上。下面是委托(delegate)方法

- (void)addCardViewController:(AddCardViewController *)sender didCreateCard:(Card *)newCard
{
// insert a new card

self.myCard = newCard;
[self.myWallet addObject:self.myCard];

[self.tableView reloadData];
}

到目前为止,我可以创建 Card 的新实例,当我这样做时,一个新的表格单元格会出现在我的初始 View Controller (Card Wallet VC) 中。

我想要的是当用户完成使用该应用程序时,他/她之前创建的 Card 创建的实例仍会出现在该应用程序的下一次运行时。所以我使用 NSUserDefaults 来做到这一点。下面的方法是我如何使用 NSUserDefaults 来保存。

- (void)saveMyWallet
{

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

[defaults setObject:self.myWallet forKey:@"myWalletArray"];

[defaults synchronize];
NSLog(@"I am saved");
}

我在 didSelectRowAtIndexPath 中调用这个方法。当我运行该应用程序,然后创建一个新的 Card 实例时,单击表格单元格,这会出现在我的日志中。

2012-05-04 14:51:00.900 CardWallet[24998:f803] *** -[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '("<Card: 0x6aa02f0>")' of class '__NSArrayM'.  
Note that dictionaries and arrays in property lists must also contain only property values.

这可能是什么原因?你能建议我如何去做吗?

提前致谢。

最佳答案

您的 Card 类还必须符合 NSCoding Protocol因为你只能存储 NSData, NSString, NSArray, NSDictionary and NSNumber NSUserDefaults。这意味着,您需要向类中添加两个方法:

- (void)encodeWithCoder:(NSCoder *)enCoder {
[super encodeWithCoder:enCoder];

[enCoder encodeObject:instanceVariable forKey:INSTANCEVARIABLE_KEY];

// Similarly for the other instance variables.
....
}

- (id)initWithCoder:(NSCoder *)aDecoder {

if(self = [super initWithCoder:aDecoder]) {
self.instanceVariable = [aDecoder decodeObjectForKey:INSTANCEVARIABLE_KEY];

// similarly for other instance variables
....
}

return self;
}

然后在将其存储到 NSUserDefaults 之前创建一个 NSData NSKeyedArchiver。像这样:

 NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
NSData *yourArrayAsData = [NSKeyedArchiver archivedDataWithRootObject:yourArray];
[ud setObject:sharesAsData forKey:kA_KEY_FOR_USERDEFAULTS];

关于iphone - 使用 NSUserDefaults 保存 NSMutableArray 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10444131/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com