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获取数据的问题).
任何代码示例都很受欢迎.
谢谢
要创建此结构非常简单,您可以创建一个字典,其中包含键"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)
如果这有助于您的问题,请接受它作为答案.