首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TableViewController内容不显示内容(reloadData)

问TableViewController内容不显示内容(reloadData)
EN

Stack Overflow用户
提问于 2014-11-12 11:58:51
回答 1查看 71关注 0票数 1

下午好,

我使用一个TableViewController从我的数据库中显示一些“条目”,我试图使用[self.tableView reloadData];来在加载内容时重新加载该表,但是它不能工作,因为只有当我向上或向下触摸屏幕时,内容才会显示出来,如果我不使用触摸就不能显示任何内容。

我想我把self.tableView reloadData;放在了正确的位置,因为由于某种原因,直到我用手指移动屏幕时才会显示出来。

为什么会发生这种情况,我能做什么来自动重新加载我的表视图?

CarTableViewController.m:

代码语言:javascript
复制
- (void)viewDidLoad
{
    [super viewDidLoad];
    [self fetchJson];
}

,这是我的fetchJson:

代码语言:javascript
复制
-(void)fetchJson {

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    dispatch_async(queue, ^{
        NSString * urlString = [NSString stringWithFormat:@"http://website.com/service.php"];
        NSURL * url = [NSURL URLWithString:urlString];
        NSData * data = [NSData dataWithContentsOfURL:url];

        self.carModels = [[NSMutableArray alloc] init];
        self.carMakes = [[NSMutableArray alloc] init];
        self.carImages = [[NSMutableArray alloc] init];
        self.likes = [[NSMutableArray alloc] init];
        self.comments = [[NSMutableArray alloc] init];

        @try
        {
            NSError *error;
            [_jsonArray removeAllObjects];
            _jsonArray = [NSJSONSerialization
                         JSONObjectWithData:data
                       options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves
                         error:&error];

            for(int i=0;i<_jsonArray.count;i++)
            {
                NSDictionary * jsonObject = [_jsonArray objectAtIndex:i];
                NSString* imagen = [jsonObject objectForKey:@"imagen"];
                [_carImages addObject:imagen];

                NSDictionary * jsonObject2 = [_jsonArray objectAtIndex:i];
                NSString* user = [jsonObject2 objectForKey:@"user"];
                [_carMakes addObject:user];

                NSDictionary * jsonObject3 = [_jsonArray objectAtIndex:i];
                NSString* date = [jsonObject3 objectForKey:@"date"];
                [_carModels addObject:date];
            }
        }
        @catch (NSException * e)
        {
            NSLog(@"Exception: %@", e);
        }
        @finally
        {
            [self.tableView reloadData];
        }
    }
    );
}

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-12 12:46:56

当我开始开发iOS应用程序时,我也经常遇到这个问题。

问题是,您没有在主线程上运行reloadData,后者负责UI。实际上,如果您运行此方法(而不是在主线程中),您的tableView的数据实际上会重新加载,但不会显示给用户。因此,如果您开始滚动tableView,主线程将“绘制”您的用户界面,从而显示数据。因此,您必须在主线程上运行reloadData。

所以拿出

代码语言:javascript
复制
[self.tableView reloadData];

并在成功地从数据库中获取数据(值存储在字典/数组中)之后添加以下代码行:

代码语言:javascript
复制
dispatch_async(dispatch_get_main_queue(), ^{
    [self.tableView reloadData];
});

我想你甚至可以把这段代码放进你的@finally块中。主main_queue包含在主线程上运行的任务。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26886452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档