3

我有以下数据结构:

- Cards
 -- Item 0
  --- Name: Card Name
  --- Number: Card Number
  --- Type: Card Type
 -- Item 1
  --- Name: Card Name
  --- Number: Card Number
  --- Type: Card Type
...

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

第一个问题是,我怎样才能将这些数据写入 NSUserDefauls (像这样嵌套)

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

任何代码示例都非常受欢迎。

谢谢

4

2 回答 2

9

要创建这种结构非常简单,您可以创建一个字典,其中包含键“卡片”的数组值。下面的例子..

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];

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

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

self.cards = [stored valueForKey:@"Cards"];

您的 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"];

   .....
}

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

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];

如果这对您的问题有所帮助,请接受它作为答案。

于 2012-05-28T17:47:20.367 回答
0

节省

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

// saving an NSArray
[prefs setObject:myArray forKey:@"keyToLookupArray"];

[prefs synchronize];    

检索

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

// getting an NSArray
NSArray *myArray= [prefs stringForKey:@"keyToLookupArray"];
于 2012-05-28T17:46:15.383 回答