gpt4 book ai didi

ios - 在 iOS 6 的 UITableView 中保留此 JSON 数据以使用的最佳方式

转载 作者:行者123 更新时间:2023-11-28 22:40:22 25 4
gpt4 key购买 nike

我的服务器正在向我发送一个 JSON 响应,如下所示:

[
{
"fields": {
"message": "Major Network Problems",
"message_detail": "This is a test message"
},
"model": "notification",
"pk": 5
},
{
"fields": {
"message": "test",
"message_detail": "Some content"
},
"model": "notification",
"pk": 4
},
{
"fields": {
"message": "Test Message",
"message_detail": "Testing testing"
},
"model": "notification",
"pk": 3
}
]

我想为 UITableView 填充每个项目一行,只显示字段的值 message然后我将点击该行以显示包含 message 的新 View 和 message_detail值。这些消息可能会在以后更新 pk值(value)将得到维护,因此保留该信息可能很重要。

什么是最合适和最有效的方法来解析这些数据并将其保留以供下次启动应用使用?

我认为 plist 是一个好方法,但我希望看到一些建议,包括一些关于如何最好地从提供的 JSON 数组转至填充 UITableView 并为下一次启动保留数据的代码。

最佳答案

假设你有一些类属性:

@interface ViewController ()
@property (nonatomic, strong) NSArray *array;
@end

只需使用NSJSONSerialization:

NSError *error;
NSData *data = [NSData dataWithContentsOfURL:url];
self.array = [NSJSONSerialization JSONObjectWithData:data
options:0
error:&error];

如果您想将数组保存在您的 Documents 文件夹中以进行持久存储,以便在将来调用应用程序时进行检索,您可以:

NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *filename = [docsPath stringByAppendingPathComponent:@"results.plist"];
[self.array writeToFile:filename atomically:NO];

稍后在下次调用时从文件中读取它(以防您不想从服务器重新检索它):

NSString *docsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *filename = [docsPath stringByAppendingPathComponent:@"results.plist"];
self.array = [NSData dataWithContentsOfFile:filename];

要将它用于 UITableView,您需要将其存储在类属性中并响应适当的 UITableViewDataSource 方法:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.array count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *cellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

NSDictionary *rowData = self.array[indexPath.row];
NSDictionary *fields = rowData[@"fields"];

cell.textLabel.text = fields[@"message"];
cell.detailTextLabel.text = fields[@"message_detail"];

return cell;
}

关于ios - 在 iOS 6 的 UITableView 中保留此 JSON 数据以使用的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14708690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com