嵌套的NSUserDefaults数组是读/写的

gmo*_*mes 3 arrays objective-c nsuserdefaults ios

我有以下数据结构:

- Cards
 -- Item 0
  --- Name: Card Name
  --- Number: Card Number
  --- Type: Card Type
 -- Item 1
  --- Name: Card Name
  --- Number: Card Number
  --- Type: Card Type
...
Run Code Online (Sandbox Code Playgroud)

用户可以根据需要添加任意数量的卡,因此名称,数量和类型是用户定义的.

第一个问题是,如何将此数据写入NSUserDefauls(嵌套如下)

第二个问题是,如何检索此数据并在表格视图中显示每张卡的名称.(我已经设置了tableview并且正在工作,所以这是从NSUserDefaults获取数据的问题).

任何代码示例都很受欢迎.

谢谢

skr*_*ram 9

要创建此结构非常简单,您可以创建一个字典,其中包含键"Cards"的数组值.以下示例..

NSMutableDictionary *cards = [NSMutableDictionary dictionary];
NSMutableArray *cardArray = [NSMutableArray array];

NSMutableDictionary *item = [NSMutableDictionary dictionary];
[item setValue:@"Card Name" forKey:@"Name"];
[item setValue:@"Card Number" forKey:@"Number"];
[item setValue:@"Card Type" forKey:@"Type"];

[cardArray addObject:item];
[cards setValue:cardArray forKey:@"Cards"];

[[NSUserDefaults standardUserDefaults] setValue:cards forKey:@"user_cards"];
[[NSUserDefaults standardUserDefaults] synchronize];
Run Code Online (Sandbox Code Playgroud)

为了检索你的卡片,你会做类似的事情.假设self.cards是一个NSMutableArray ivar ..

NSMutableDictionary *stored = [[NSUserDefaults standardUserDefaults] valueForKey:@"user_cards"];

self.cards = [stored valueForKey:@"Cards"];
Run Code Online (Sandbox Code Playgroud)

您的tableview应使用cardsivar填充您的数据,如下所示.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    ...... 

    //Now we populate each row of the cell with each `card` Name.
  cell.textLabel.text = [[self.cards objectAtIndex:[indexPath row]] valueForKey:@"Name"];

   .....
}
Run Code Online (Sandbox Code Playgroud)

要将任何新添加的卡重新保存到存储的字典中,您可以执行以下操作.

NSMutableDictionary *newCard = [NSMutableDictionary dictionary];
[newCard setValue:@"Card Name" forKey:@"Name"];
[newCard setValue:@"Card Number" forKey:@"Number"];
[newCard setValue:@"Card Type" forKey:@"Type"];

[self.cards addObject:newCard];

[[NSUserDefaults standardUserDefaults] valueForKey:@"user_cards"] setValue:self.cards forKey:@"Cards"];
[[NSUserDefaults standardUserDefaults] synchronize];
Run Code Online (Sandbox Code Playgroud)

如果这有助于您的问题,请接受它作为答案.