Json数据在uitableview ios中没有更新?

Posted

技术标签:

【中文标题】Json数据在uitableview ios中没有更新?【英文标题】:Json data is not updated in uitableview ios? 【发布时间】:2014-11-12 08:48:26 【问题描述】:

我正在使用故事板构建一个 ios 文章阅读应用程序。我正在使用 AFNetworking 库来解析表格视图中的 json。

我面临一个问题,即更新的文章未显示在表格视图中,这意味着如果在 json 中添加了新文章但未在我的表格视图中更新。

这是我的代码:

       - (void)viewDidLoad
          
            [super viewDidLoad];
            [self.tableView reloadData];
             x=2;

              tempJson = [[NSMutableArray alloc] init];
              [self.tableView reloadData];


       NSString *jsonLink=[NSString stringWithFormat:@"http://cccccc.com/json.php?token=hashg156349&page=1"];
       NSURL *url = [[NSURL alloc] initWithString:jsonLink];
       NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                         cachePolicy:NSURLRequestReturnCacheDataElseLoad
                                     timeoutInterval:30.0];
         [request setTimeoutInterval:120];


       AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];

       [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) 
       dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^

         NSArray *jsonArray = (NSArray *)responseObject;
         dispatch_async(dispatch_get_main_queue(), ^

            for (NSDictionary *dic in jsonArray) 
                Json *json = [[Json alloc] initWithDictionary:dic];
                [tempJson addObject:json];
            
            self.jsons = [[NSArray alloc] initWithArray:tempJson];
            //  tempNinjas = nil;
            [self.tableView reloadData];
            self.tableView.separatorColor = [UIColor colorWithRed:190/255.0 green:190/255.0 blue:190/255.0 alpha:1.0];

               );
           );
           failure:^(AFHTTPRequestOperation *operation, NSError *error) 
          UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error"
                                                        message:[error  localizedDescription]
                                                        delegate:nil
                                               cancelButtonTitle:@"Ok"
                                               otherButtonTitles:nil];
              [alertView show];
            ];
          [operation start];

            

【问题讨论】:

你能告诉我们你的 TableViewDataSource 方法吗? 此代码仅在创建此视图时运行一次 (viewDidLoad),您可能希望在每次显示视图时更新数据 (viewDidAppear),或者如果用户可以刷新数据,则更频繁地更新数据下拉刷新操作 感谢@dirgroten 是的,我想在每次显示视图时更新数据。 每次点击 tableview 时最好在 viewWillAppear 中使用此代码重新加载或将此代码留在 ViewDidLoad 和 viewWillAppear 下使用 [self.tableView reloadData]; @ShashankBohra 这不能解决您的问题。好像数据源没有设置为self.json数组。 【参考方案1】:

首先尝试从服务器调用您的数据并获取数据。之后,使用您获取的数据加载您的表格视图,如下所示。

 -(void)viewWillAppear



                 x=2;

                  tempJson = [[NSMutableArray alloc] init];


           NSString *jsonLink=[NSString stringWithFormat:@"http://cccccc.com/json.php?token=hashg156349&page=1"];
           NSURL *url = [[NSURL alloc] initWithString:jsonLink];
           NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                             cachePolicy:NSURLRequestReturnCacheDataElseLoad
                                         timeoutInterval:30.0];
             [request setTimeoutInterval:120];


           AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    operation.responseSerializer = [AFJSONResponseSerializer serializer];

           [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) 
           dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^

             NSArray *jsonArray = (NSArray *)responseObject;
             dispatch_async(dispatch_get_main_queue(), ^

                for (NSDictionary *dic in jsonArray) 
                    Json *json = [[Json alloc] initWithDictionary:dic];
                    [tempJson addObject:json];
                
                self.jsons = [[NSArray alloc] initWithArray:tempJson];
                //  tempNinjas = nil;

                self.tableView.separatorColor = [UIColor colorWithRed:190/255.0 green:190/255.0 blue:190/255.0 alpha:1.0];

                   );
               );
               failure:^(AFHTTPRequestOperation *operation, NSError *error) 
              UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error"
                                                            message:[error  localizedDescription]
                                                            delegate:nil
                                                   cancelButtonTitle:@"Ok"
                                                   otherButtonTitles:nil];
                  [alertView show];
                ];
              [operation start];


    [self.tableView reloadData];

    

【讨论】:

为什么这应该可以解决问题?他说调用 reloadData 时,数据已正确加载到数组中。 我认为 self.jsons = [[NSArray alloc] initWithArray:tempJson];没有更新。因为它只调用一次。这样他就可以再次获取数据并尝试 @Sport 我也在 -(void)viewWillAppear 中这样做了,但它不起作用。我认为它在 uitableview 中加载缓存数据而不是更新数据。 你检查过 viewDidLoad 和 viewWillAppear 里面的相同数据。请使用断点并检查 tempJson 和 self.jsons 是什么 是的,我已经检查过它是一个 AFNetworking 缓存策略问题

以上是关于Json数据在uitableview ios中没有更新?的主要内容,如果未能解决你的问题,请参考以下文章

在iOS中单击按钮时如何在UITableView中获取特定的JSON数据(目标c)?

UITableView 中未加载 JSON 数据

UIViewController中的UITableView不显示json?

使用 JSON 数据填充 UITableView

尝试在 UITableView 中加载大量 JSON 数据需要很长时间

在 UITableView 中显示 JSON 数据