Ios UITableView滚动滞后

Ios UITableView滚动滞后,ios,json,uitableview,Ios,Json,Uitableview,我有一个从服务器加载内容的UITableView。 一切正常,内容加载正确,但当我滚动我的UITableView时有点滞后。 我创建了一个从服务器下载内容的方法,我在viewDidLoad方法中调用这个方法,因为它是我打开应用程序时打开的第一件事。 我不知道这是不是最好的办法。 我怎样才能避免呢?这是我的密码: - (void)viewDidLoad { [super viewDidLoad]; // Method that Loads the Content [sel

我有一个从服务器加载内容的UITableView。 一切正常,内容加载正确,但当我滚动我的UITableView时有点滞后。 我创建了一个从服务器下载内容的方法,我在viewDidLoad方法中调用这个方法,因为它是我打开应用程序时打开的第一件事。 我不知道这是不是最好的办法。 我怎样才能避免呢?这是我的密码:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Method that Loads the Content
    [self retrieveData];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Retorna o número de linhas pelo array de programacao.
    return programacaoArray.count;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    // ALTURA da TableViewCell
    return 150;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *identifier = @"CellIdentifier";
    ProgramacaoTableCell *cell = (ProgramacaoTableCell *)[self.tableView dequeueReusableCellWithIdentifier:identifier];

    if (cell == nil) {
        cell = [[ProgramacaoTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
    }

    // Configure the Cell
    Programacao *programacaoObject;
    programacaoObject = [programacaoArray objectAtIndex:indexPath.row];

    cell.atracaoImagem.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:programacaoObject.programacaoImagem]]];
    cell.nomeLabel.text = programacaoObject.programacaoNome;
    cell.dataLabel.text = programacaoObject.programacaoData;
    cell.localLabel.text = programacaoObject.programacaoLocal;

    return cell;

}

- (void) retrieveData
{

    NSURL *url = [NSURL URLWithString:getDataURL];
    NSData *data = [NSData dataWithContentsOfURL:url];

    jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

    // SETUP programacaoArray
    programacaoArray = [[NSMutableArray alloc] init];

    // Loop throught do Array
    for (int i = 0; i < jsonArray.count; i++) {
        // Cria o PROGRAMACAO Objeto
        NSString *pID         = [[jsonArray objectAtIndex:i] objectForKey:@"id"];
        NSString *pNome       = [[jsonArray objectAtIndex:i] objectForKey:@"programacaoNome"];
        NSString *pImagem     = [[jsonArray objectAtIndex:i] objectForKey:@"programacaoImagem"];
        NSString *pDescricao  = [[jsonArray objectAtIndex:i] objectForKey:@"programacaoDescricao"];
        NSString *pData       = [[jsonArray objectAtIndex:i] objectForKey:@"programacaoData"];
        NSString *pLocal      = [[jsonArray objectAtIndex:i] objectForKey:@"programacaoLocal"];
        NSString *pPrecos     = [[jsonArray objectAtIndex:i] objectForKey:@"programacaoPrecos"];

        // Add to the Array
        [programacaoArray addObject:[[Programacao alloc] initWithNome:pNome andImagem:pImagem andDescricao:pDescricao andData:pData andLocal:pLocal andPrecos:pPrecos andID:pID]];
    }

    // RELOAD TABLE VIEW
    [self.tableView reloadData];
}
-(void)viewDidLoad
{
[超级视图下载];
//方法加载内容
[自检索数据];
}
-(NSInteger)表格视图中的节数:(UITableView*)表格视图
{
//返回节数。
返回1;
}
-(NSInteger)表视图:(UITableView*)表视图行数节:(NSInteger)节
{
//雷托纳·奥努梅罗·德·林哈斯·佩罗阵列项目。
返回程序acoaarray.count;
}
-(CGFloat)tableView:(UITableView*)表视图行高度索引路径:(NSIndexPath*)索引路径{
//ALTURA da TableViewCell
返回150;
}
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
静态NSString*标识符=@“CellIdentifier”;
ProgramAcoaTableCell*单元格=(ProgramAcoaTableCell*)[self.tableView dequeueReusableCellWithIdentifier:identifier];
如果(单元格==nil){
cell=[[ProgramAcoaTableCell alloc]initWithStyle:UITableViewCellStyleDefault重用标识符:标识符];
}
//配置单元格
Programacao*programacaoObject;
programacaoObject=[ProgramAcoaarray对象索引:indexPath.row];
cell.atracaoImagem.image=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:programacaoObject.programacaoImagem]];
cell.nomeLabel.text=ProgramAcoobject.ProgramAconome;
cell.dataLabel.text=programacaoObject.programacaoData;
cell.localLabel.text=ProgramAcoobject.ProgramAcolocal;
返回单元;
}
-(无效)检索数据
{
NSURL*url=[NSURL URLWithString:getDataURL];
NSData*data=[NSData dataWithContentsOfURL:url];
jsonArray=[NSJSONSerialization JSONObjectWithData:数据选项:针织错误:nil];
//安装程序Acoarray
ProgramAcoarray=[[NSMutableArray alloc]init];
//循环通过do数组
for(int i=0;i
你犯了一个非常明显的错误。您正在同步加载映像(在同一线程上,在本例中是主线程),这就是造成延迟的原因。您应该研究使用
AFNetworking
UIImageView
类别,它将在后台为您加载这些图像


您可以从下载
AFNetworking
库。

我认为您应该调用
视图中的
retrieveData
函数将出现
方法,而不是
viewDidLoad

我认为代码导致问题: 'cell.atracaoImagem.image=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:programacaoObject.programacaoImagem]]


您可以使用框架,加载图像

programacaoObject.programacaoImagem包含什么类型的字符串?这是一个“http://”链接吗?他在问题中说他从服务器下载内容,所以我的猜测是“是”。这个“是”也是问题的答案;)Yes@Michael是一个http链接,包含指向图像的url。他的问题是滚动表视图,而不是加载整个视图。他应该做的是在后台运行
retrieveData
。在这一点上,您可以使用
AFNetworking
retrieveData
中运行下载操作,调用
[self.tableView reloadData]在完成方法中。关键是永远不要在主线程上下载。