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