Tôi có mảng này có thể thay đổi tên myWallet với kê khai tài sản của mình:tiết kiệm một NSMutableArray sử dụng NSUserDefaults không làm việc
@property (nonatomic, strong) NSMutableArray *myWallet;
mảng này đã được lấp đầy bởi Thủy, đó là một đối tượng. Tôi tạo một thể hiện mới của một Card từ một View Controller khác, vì vậy tôi sử dụng một phương thức delegate để có thể truyền thẻ được tạo trên View Controller ban đầu của tôi, đó là một Table View Controller. Bên dưới là phương thức ủy nhiệm
- (void)addCardViewController:(AddCardViewController *)sender didCreateCard:(Card *)newCard
{
// insert a new card
self.myCard = newCard;
[self.myWallet addObject:self.myCard];
[self.tableView reloadData];
}
Cho đến nay, tôi có thể tạo phiên bản mới của Thẻ và khi tôi thực hiện, một ô bảng mới xuất hiện trong bộ điều khiển xem ban đầu của tôi (Thẻ Wallet VC).
Điều tôi muốn là khi người dùng hoàn tất việc sử dụng ứng dụng, (các) cá thể đã tạo của Thẻ mà người đó tạo trước đó vẫn xuất hiện vào lần chạy ứng dụng tiếp theo. Vì vậy, tôi đã sử dụng NSUserDefaults để làm điều này. Phương pháp bên dưới là cách tôi đang sử dụng NSUserDefaults để lưu.
- (void)saveMyWallet
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:self.myWallet forKey:@"myWalletArray"];
[defaults synchronize];
NSLog(@"I am saved");
}
Tôi gọi phương thức này bên trong didSelectRowAtIndexPath. Khi tôi chạy ứng dụng, sau đó tạo một phiên bản mới của Thẻ, hãy nhấp vào ô bảng, điều này xuất hiện trên nhật ký của tôi.
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.
Lý do có thể là gì? Và bạn có thể gợi ý cho tôi những cách tôi có thể làm được không.
Xin cảm ơn trước.
Đầu tiên loại bỏ thuộc tính mảng của bạn và sau đó kiểm tra những giá trị có trong mảng của bạn bằng cách sử dụng nslog đi cho khóa – vishiphone