【问题标题】:UITableview not loaded data on 3rd time?UITableview 第三次没有加载数据?
【发布时间】:2016-03-29 09:08:11
【问题描述】:

不知道该怎么办。但是我在加载数据时加载了数据和加载表,

[manager POST:path parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) {

    arryGlobal = [NSMutableArray new];
    [arryGlobal addObject:responseObject];

    if([[[[arryGlobal valueForKey:@"Success"] objectAtIndex:0] stringValue] isEqualToString:@"1"]){

        arryGlobal = [[arryGlobal valueForKey:@"Result"] objectAtIndex:0];

        dispatch_async(dispatch_get_main_queue(), ^{
        [self.tblMainCategory reloadData];
        });
    }
    else if([[[[arryGlobal valueForKey:@"Success"] objectAtIndex:0] stringValue] isEqualToString:@"0"]){

    }

} failure:^(NSURLSessionDataTask *task, NSError *error) {

    //here is place for code executed in error case
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error while sending"
                                                        message:@"Sorry, try again."
                                                       delegate:nil
                                              cancelButtonTitle:@"Ok"
                                              otherButtonTitles:nil];
    [alertView show];

    NSLog(@"Error: %@", [error localizedDescription]);
}];

它两次完美运行,但是当我第三次调用此 Web 服务时,它会加载数据、获取数据、成功重新加载表格,但它不会更改表格中的内容,它会显示为第二次。

那么那里会发生什么?当我滚动表格时,在我用来传入表格的cellForRowAtIndexPath 数组中包含第二次称为 Web 服务的数据。

编辑:

我在其他视图中添加了这个表视图 VievController:

MainCategory *objMain = [[MainCategory alloc] initWithNibName:@"MainCategory" bundle:nil];
[objMain LoadData:tag];
objMain.view.frame = CGRectMake(0, 0, self.bgViewCat.frame.size.width, self.bgViewCat.frame.size.height);
[self.bgViewCat insertSubview:objMain.view atIndex:1];
[self addChildViewController:objMain];
[objMain didMoveToParentViewController:self];

【问题讨论】:

  • 您创建一个新数组,将响应对象添加到其中,然后如果响应对象中的某些内容匹配您然后替换数组?太丑了。
  • 那里的最佳做法是什么?
  • @DxAndroid,请更新你的代码结构,如果响应有变化,它随时可能崩溃。
  • 您确定第 3 次尝试收到的数据与第 2 次尝试收到的数据不同吗?也尝试禁用缓存。也许这就是导致问题的原因。

标签: ios objective-c uitableview afnetworking


【解决方案1】:

试试这个

    if([[[[arryGlobal valueForKey:@"Success"] objectAtIndex:0] stringValue] isEqualToString:@"1"])
{
    [arryGlobal removeAllObjects];
    arryGlobal=[NSarray alloc]init];
    arryGlobal = [[arryGlobal valueForKey:@"Result"] objectAtIndex:0];

    dispatch_async(dispatch_get_main_queue(), ^{
    [self.tblMainCategory reloadData];
    });
}

【讨论】:

  • 并从 arryGlobal 中删除所有对象,它在第 3 行崩溃,因为其中没有数据。
  • if (!(arryGlobal == nil || [arryGlobal count] == 0)) { [arryGlobal removeAllObjects]; }
【解决方案2】:

block:success() 已经在主队列中运行;你不需要使用 dispatch_async(dispatch_get_main_queue(); 而 arryGlobal 是一种 NSMutableArray;为什么要使用名为“thevalueforKey:”的函数来获取值? 我想也许你应该打印 responseObject 来检查你的数据

【讨论】:

  • P.S是arryGlobal全局变量吗?
  • 没有 dispatch_get_main_queue 也无法正常工作.. 是的,它是全局变量。
  • 函数 [arryGlobal valueForKey:@"Success"] 得到了什么?
  • __weak typeof(self) weakself = self; [manager POST:path parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) { if([[[[responseObject valueForKey:@"Success"] objectAtIndex:0] stringValue] isEqualToString:@"1"]){ arryGlobal = [[responseObject valueForKey:@"Result"] objectAtIndex:0]; [weakself.tblMainCategory reloadData]; } } 失败:^(NSURLSessionDataTask *task, NSError *error) NSLog(@"Error: %@", [error localDescription]); }];
  • 试试这个
      __weak typeof(self) weakself = self; [manager POST:path parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) { if([[[[responseObject valueForKey:@"Success"] objectAtIndex:0] stringValue] isEqualToString:@"1"]){ arryGlobal = [[responseObject valueForKey:@"Result"] objectAtIndex:0]; [weakself.tblMainCategory reloadData]; } } 失败:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"错误: %@", [错误本地化描述]); }];
【解决方案3】:

好的,所以有错误:

[self.bgViewCat insertSubview:objMain.view atIndex:1];

我用这个而不是这个,一切都很好,不知道为什么?:

[self.bgViewCat addSubview:objMain.view];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    相关资源
    最近更新 更多