uiimageview получает nil и, следовательно, сбой кода

#iphone #uitableview #uiimageview

#iPhone #uitableview #uiimageview

Вопрос:

в этом блоке кода мой uiimageview всегда получает nil.as в результате происходит сбой кода. я не могу понять, куда попадает uiimageview nil.in этот код сам ссылается на uitableviewcell. сбой кода в коде, в котором я вставляю imageview в array.is это проблема сохранения памяти?

 MyAppDelegate *appDelegate =(myAppDelegate *)[[UIApplication sharedApplication]delegate];
        UIImageView *profileImageView;
        UILabel *tweetLabel;
        UILabel *timeLabel;
        UILabel *profileNameLabel;
        UIView *message;
        if(self==nil)
        {


        profileImageView = [[UIImageView alloc] initWithFrame:CGRectZero];
        profileImageView.backgroundColor= [UIColor clearColor];
        profileImageView.tag = 1;

        tweetLabel = [[UILabel alloc] initWithFrame:CGRectZero];
        tweetLabel.backgroundColor = [UIColor clearColor];
        tweetLabel.tag = 2;
        tweetLabel.numberOfLines = 3;
        tweetLabel.lineBreakMode = UILineBreakModeWordWrap;
        tweetLabel.font = [UIFont systemFontOfSize:10.0];
        tweetLabel.textColor=[UIColor blackColor];

        timeLabel = [[UILabel alloc] initWithFrame:CGRectZero];
        timeLabel.backgroundColor = [UIColor clearColor];
        timeLabel.tag = 3;
        timeLabel.numberOfLines = 1;
        timeLabel.lineBreakMode = UILineBreakModeWordWrap;
        timeLabel.font = [UIFont systemFontOfSize:12.0];
        timeLabel.textColor=[UIColor blackColor];

        profileNameLabel = [[UILabel alloc] initWithFrame:CGRectZero];
        profileNameLabel.backgroundColor = [UIColor clearColor];
        profileNameLabel.tag = 4;
        profileNameLabel.numberOfLines = 1;
        profileNameLabel.lineBreakMode = UILineBreakModeWordWrap;
        profileNameLabel.font = [UIFont boldSystemFontOfSize:14.0];
        profileNameLabel.textColor=[UIColor blackColor];

        message = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.frame.size.width, self.frame.size.height)];
        message.tag = 0;
        [message addSubview:profileImageView];
        [message addSubview:tweetLabel];
        [message addSubview:timeLabel];
        [message addSubview:profileNameLabel];

        [self addSubview:message];
        }
        else{
            tweetLabel = (UILabel *)[[self.contentView viewWithTag:0]viewWithTag:2];
            timeLabel = (UILabel *)[[self.contentView  viewWithTag:0]viewWithTag:3];
            profileNameLabel = (UILabel *)[[self.contentView  viewWithTag:0]viewWithTag:4];

        profileImageView = (UIImageView *)[self.contentView viewWithTag:1];
        NSLog(@" profileImageView %@",profileImageView);
        }
        NSString *tweet=[tweetObject tweet];
        NSString *profileName=[tweetObject author];
        NSString *time=[tweetObject time];



        CGSize textSize = [tweet sizeWithFont:[UIFont systemFontOfSize:14.0] constrainedToSize:CGSizeMake(240.0f, 480.0f) lineBreakMode:UILineBreakModeWordWrap];
        CGSize timeSize = [time sizeWithFont:[UIFont systemFontOfSize:14.0] constrainedToSize:CGSizeMake(240.0f, 480.0f) lineBreakMode:UILineBreakModeWordWrap];
        CGSize profileNameSize = [profileName sizeWithFont:[UIFont boldSystemFontOfSize:14.0] constrainedToSize:CGSizeMake(240.0f, 480.0f) lineBreakMode:UILineBreakModeWordWrap];

        profileImageView.frame = CGRectMake(5,self.frame.size.height/2, 44, 44);
        NSLog(@" profileImageView %@",profileImageView);
            tweetLabel.frame = CGRectMake(54, profileImageView.frame.size.width, 240,25);

        timeLabel.frame = CGRectMake(180, 5.0f, 100,  timeSize.height);

        profileNameLabel.frame = CGRectMake(54,5, 150, profileNameSize.height);
        tweetLabel.text=tweet;
        timeLabel.text=time;
        profileNameLabel.text=profileName;


        profileImageView.image = [[UIImage imageNamed:@"fbdefaultProfile.gif"]retain];
        NSLog(@" myArray WILL FILL WITH  THIS ELEMNTS %@ %@ %@ ",profileImageView,[tweetObject imageURL],@"fbdefaultProfile.gif");
        NSArray *myArray =  [NSArray arrayWithObjects:profileImageView,[tweetObject imageURL],@"fbdefaultProfile.gif",nil];
        NSLog(@" myArray %@",myArray);
        NSLog(@"%@ myArray ",myArray);
        [appDelegate performSelectorInBackground:@selector(updateImageViewInBackground:) withObject:myArray];

        }
        return;
  

Ответ №1:

 if(self==nil)
        {
  

что это.. Я думаю, что это должно быть

  if(self!=nil)
        {
  

и если это нормально, то почему вы добавляете subview к нулевому значению

  if(self==nil)
        {

        //your code .....
        //and then you are adding sub view to a nil which is useless
        [self addSubview:message];
        }
  

Комментарии:

1. спасибо, что это указало на ошибку. на самом деле условие правильное. я должен добавить это, только если ячейка равна нулю. в противном случае он будет продолжать добавлять подвиды, если вы прокручиваете tableview. единственное, что я пропустил при создании tableviewcell, это то, что это nil.спасибо

Ответ №2:

Проблема может быть в приведенной ниже строке кода.

 profileImageView = (UIImageView *)[self.contentView viewWithTag:1];
  

Возможно, у вас нет представления с идентификатором тега 1;

пожалуйста, проверьте значение nil после получения представления от viewWithTag .

 if([self.contentView viewWithTag:1] != nil)
{
    profileImageView = (UIImageView *)[self.contentView viewWithTag:1];
}