#objective-c #ios #uitableview
#objective-c #iOS #uitableview
Вопрос:
когда я пытаюсь прокрутить свой tableview, приложение завершает работу, ниже показан мой код, пожалуйста, помогите мне исправить эту проблему
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{
NSLog(@"indexPath.row---%d",indexPath.row);
UILabel *skuLbl;
// *cellImgView;
static NSString *cellIdentifier=@"Cell";
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if(cell==nil){
NSLog(@"indexPath cell");
cell=[[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]autorelease];
UIImageView *cellImgView=[[UIImageView alloc]initWithFrame:CGRectMake(25,20,717,125)];
cellImgView.image=[UIImage imageNamed:@"cell.png"];
[cell.contentView addSubview:cellImgView];
skuLbl=[[UILabel alloc]initWithFrame:CGRectMake(62,20,680,125)];
skuLbl.backgroundColor=[UIColor clearColor];
skuLbl.font=[UIFont fontWithName:@"helvetica" size:40];
skuLbl.textColor=[UIColor blackColor];
[cell.contentView addSubview:skuLbl];
cell.selectionStyle=NO;
tableView.separatorColor=[UIColor whiteColor];
}
// NSLog(@"inside cell--%@",[[appDelegateObj.parsedRowsSku objectAtIndex:indexPath.row]objectForKey:@"SKU"]);
// skuLbl.text=[[appDelegateObj.parsedRowsSku objectAtIndex:indexPath.row]objectForKey:@"SKU"];
skuLbl.text=[NSString stringWithFormat:@"%d",indexPath.row];
return cell;
}
Комментарии:
1. Спасибо за очень читаемый код.
2. Вы подключили отладчик? Если да, то в какой строке прерывается код?
3. -1: Ваш первоначальный вопрос был абсолютно неформатным. После того, как вы уже задали более 20 вопросов, вы должны знать, как форматировать. И вы должны знать, что публикация информации о сбое (исключения, сообщения в отладчике и т. Д.) Практически обязательна. Должны ли мы угадать, какой сбой произошел? Вы хотите, чтобы мы вам помогли, поэтому, пожалуйста, помогите нам, приложив больше усилий к вашему вопросу.
4. Я не вижу никакого источника сбоя. НО: вы никогда не выпускаете cellImgView и skuLbl. Почему бы не разместить [skuLbl release] и [cellImgView release] после добавления их в подпредставление?
Ответ №1:
Когда вы прокручиваете представление таблицы, оно пытается повторно использовать свои ячейки, поэтому
if(cell==nil){
...
}
может не вызываться, и ваш указатель skuLbl остается не инициализированным. Итак, позже вы пытаетесь получить доступ к этому недопустимому указателю, и это приводит к сбою.
Вам нужно получить ссылку на метку вне блока инициализации, чтобы убедиться, что она всегда действительна:
UILabel *skuLbl = nil;
static NSString *cellIdentifier=@"Cell";
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if(cell==nil){
...
skuLbl.tag = 100;
...
}
skuLbl = (UILabel*)[cell.contentView viewWithTag:100];
...
Ответ №2:
убедитесь, что количество строк равно размеру вашего массива или тому, что вы используете с помощью этого метода:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [self.myArray count]; }
Ответ №3:
Отредактируйте свой код, как показано ниже::
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
UILabel *skuLbl = nil;
static NSString *cellIdentifier=@"Cell";
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if(cell==nil) {
cell=[[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]autorelease];
UIImageView *cellImgView=[[UIImageView alloc]initWithFrame:CGRectMake(25,20,717,125)];
cellImgView.image=[UIImage imageNamed:@"cell.png"];
[cell.contentView addSubview:cellImgView];
skuLbl=[[UILabel alloc]initWithFrame:CGRectMake(62,20,680,125)];
skuLbl.tag = 100;
skuLbl.backgroundColor=[UIColor clearColor];
skuLbl.font=[UIFont fontWithName:@"helvetica" size:40];
skuLbl.textColor=[UIColor blackColor];
[cell.contentView addSubview:skuLbl];
cell.selectionStyle=NO;
tableView.separatorColor=[UIColor whiteColor];
} else {
// This method called at creation and scrolling of tableview for every individual cell.
// Due to creation and scrolling of tableview skuLbl refrence get nil
// So get new refrence of skuLbl from cell's contentView as below
skuLbl = (UILabel*)[cell.contentView viewWithTag:100];
}
skuLbl.text=[NSString stringWithFormat:@"%d",indexPath.row];
return cell;
}