JSON到Tableview [重复]

Posted

技术标签:

【中文标题】JSON到Tableview [重复]【英文标题】:JSON to Tableview [duplicate] 【发布时间】:2016-11-06 20:47:12 【问题描述】:

我一直在尝试将来自网络服务器的 JSON 数据附加到 tableviewcontroller 中。这是我当前的代码。

_datalist 的 NSlog 打印 JSON,但实际将数据放入单元格的其他方法没有。代码看起来正确,并且由于 _datalist NSarray 实际获取数据,我不确定如何处理这..这就是为什么我需要你的帮助和建议。

至于我发现的,用 JSON 数据初始化单元格的方法,既不能获取它,也不能使用它。我的线索是我需要对传入的数据进行编码?

#import "TopUsersViewController.h"

@interface TopUsersViewController ()
@property  NSArray* dataList;
@end

@implementation TopUsersViewController




- (void)viewDidLoad

    [super viewDidLoad];

    [self readDataFromFile];

    [self.tableView reloadData];



-(void)readDataFromFile



    NSString *urlAsString = @"http://myURL.com/json.json";

    NSURL *url = [[NSURL alloc] initWithString:urlAsString];
    NSLog(@"%@", urlAsString);

    [NSURLConnection sendAsynchronousRequest:[[NSURLRequest alloc] initWithURL:url] queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)

        if (error)
        
            // no internet / can't fetch!
            NSLog(@"Failure %@",error.localizedDescription);


        


            NSLog(@"Success!");


            dispatch_async(dispatch_get_main_queue(), ^
                NSLog(@"works.");

            self.dataList = (NSArray *)[NSJSONSerialization JSONObjectWithData:data
                                                         options:0
                                                           error:nil];

            // this NSlog prints the JSON data successfully.    
            NSLog(@"oo%@ and array %@",_dataList,_array);




            );
    ];








// 这些方法都没有运行..

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView


    return 1;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    // count the initialized array from viewDidLoad
    return self.dataList.count;


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

        NSLog(@"return the data");
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    id keyValuePair = self.dataList[indexPath.row];


    cell.textLabel.text = keyValuePair[@"identity"];

    cell.detailTextLabel.text=[NSString stringWithFormat:@"Points: %@", keyValuePair[@"points"]];
    return cell;



@end

【问题讨论】:

下次我会更仔细地查看其他问题,谢谢您指出这一点!编码愉快! @SyedeHussaini 如果您要向其他人指出问题,您确实需要解决您的答案中的问题。 另外,您的链接是针对 Swift 的。由于我当前的应用程序是用 Obj-c 编写的,因此不相关。 :P 【参考方案1】:

您需要通过委托方法告诉您的tableView,当您的数组中有数据时您想要重新加载您的 tableView...

dispatch_async(dispatch_get_main_queue(), ^
                NSLog(@"works.");

            self.dataList = (NSArray *)[NSJSONSerialization JSONObjectWithData:data
                                                         options:0
                                                           error:nil];

            [self.tableView reloadData];
            // this NSlog prints the JSON data successfully.    
            NSLog(@"oo%@ and array %@",_dataList,_array);




            );

您正在 viewDidLoad 方法中重新加载您的 tableView,而此时您的数组没有元素,并且当您的 api 调用的成功块执行时,您需要调用 reloadData 方法。

【讨论】:

哦.. 我在 viewDidLoad 中确实有那个方法?你认为这会有所作为吗? - (void)viewDidLoad [超级 viewDidLoad]; [自我读取数据从文件]; [self.tableView reloadData]; 不,仍然不会运行这些方法。因为你不知道你的 API 调用何时成功。因此,当您的数组加载数据时,您必须重新加载数据,因此请在加载数据的行下方调用 reloadData 方法。 非常感谢您审阅我的案例。它解决了它!快乐的 ios 编码! :)

以上是关于JSON到Tableview [重复]的主要内容,如果未能解决你的问题,请参考以下文章

自定义单元格的“没有重复使用表格单元格的索引路径”问题

Objective-C - tableView,按降序排序JSON数组[重复]

来自json的数组数据在tableview ios上重复

在 tableView:cellForRowAtIndexPath 中确定 iPhone 和 iPad 的不同单元格:

Swift 3:Tableview 选择行转到不同的导航视图

NSFetchedResultsController - TableView 中的 UI 更新不完整