【问题标题】:load local json information in UITableView在 UITableView 中加载本地 json 信息
【发布时间】:2014-03-13 15:48:25
【问题描述】:

我有自己的 json 文件“list.json”,其中包含如下示例信息列表。我的 json 文件是 位于 Xcode 内部,我想将我的信息显示到表格中,请您给我一些关于此实现的提示和帮助,如何解析本地 json 并在表格中加载信息。

[
{
    "number": "1",
    "name": "jon"
},
{
    "number": "2",
    "name": "Anton"
},
{
    "number": "9",
    "name": "Lili"
},
{
    "number": "7",
    "name": "Kyle"
},
{
    "display_number": "8",
    "name": "Linda"
}
]

【问题讨论】:

    标签: objective-c json parsing uitableview nsdictionary


    【解决方案1】:

    您可以创建一个继承自 UITableViewController 的自定义类。

    将list.json文件内容读入数组的代码为:

    NSString * filePath =[[NSBundle mainBundle] pathForResource:@"list" ofType:@"json"];
    
        NSError * error;
        NSString* fileContents =[NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];
    
    
        if(error)
        {
            NSLog(@"Error reading file: %@",error.localizedDescription);
        }
    
    
        self.dataList = (NSArray *)[NSJSONSerialization
                                    JSONObjectWithData:[fileContents dataUsingEncoding:NSUTF8StringEncoding]
                                    options:0 error:NULL];
    

    而头文件是:

    #import <UIKit/UIKit.h>
    
    @interface TVNA_ReadingDataTVCViewController : UITableViewController
    
    @end
    

    实现是:

    #import "TVNA_ReadingDataTVCViewController.h"
    
    @interface TVNA_ReadingDataTVCViewController ()
    
    @property  NSArray* dataList;
    
    @end
    
    @implementation TVNA_ReadingDataTVCViewController
    
    
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        [self readDataFromFile];
    
        [self.tableView reloadData];
    }
    
    
    -(void)readDataFromFile
    {
        NSString * filePath =[[NSBundle mainBundle] pathForResource:@"list" ofType:@"json"];
    
        NSError * error;
        NSString* fileContents =[NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];
    
    
        if(error)
        {
            NSLog(@"Error reading file: %@",error.localizedDescription);
        }
    
    
        self.dataList = (NSArray *)[NSJSONSerialization
                                    JSONObjectWithData:[fileContents dataUsingEncoding:NSUTF8StringEncoding]
                                    options:0 error:NULL];
    }
    
    
    
    #pragma mark - Table view data source
    
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
    
        return 1;
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
    
        return self.dataList.count;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *CellIdentifier = @"Cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    
        id keyValuePair =self.dataList[indexPath.row];
    
        cell.textLabel.text = keyValuePair[@"name"];
    
        cell.detailTextLabel.text=[NSString stringWithFormat:@"ID: %@", keyValuePair[@"number"]];
        return cell;
    }
    
    
    @end
    

    最后,在您的故事板上,将该类指定为您的 Table View Controller 的自定义类。希望这会有所帮助。

    【讨论】:

    • @user3273254 不用担心
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    相关资源
    最近更新 更多