我有一个名为myWallet的可变数组,其属性声明如下:
@property (nonatomic, strong) NSMutableArray *myWallet;
这个数组正在被对象 Cards 填充。我从另一个视图控制器中创建了一个 Card 的新实例,因此我使用代理方法来将此创建的卡片传递到我的初始视图控制器,即表格视图控制器。以下是代理方法:
- (void)addCardViewController:(AddCardViewController *)sender didCreateCard:(Card *)newCard
{
// insert a new card
self.myCard = newCard;
[self.myWallet addObject:self.myCard];
[self.tableView reloadData];
}
到目前为止,我可以创建Card的新实例,当这样做时,在我的初始视图控制器(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.
可能的原因是什么?你能给我建议吗?关于这个问题,有以下几种方式可以解决。
提前感谢。