Tableview загружает более 50 изображений Получено предупреждение о памяти

Это данные моей соты

for (int s=0; s<[arrayForPhotosData1 count]; s++) {
    PhotoCell *cell=[[PhotoCell alloc] init];
    cell.imgPhoto.layer.shadowColor = [UIColor lightGrayColor].CGColor;
    cell.imgPhoto.layer.shadowOffset = CGSizeMake(0, 2);
    cell.imgPhoto.layer.shadowOpacity = 1;
    cell.imgPhoto.layer.shadowRadius = 1.0;
    cell.imgPhoto.clipsToBounds = NO;
    if([[arrayForPhotosData1 objectAtIndex:s] valueForKey:@"resolution_280_280"]!=NULL)
    {
        [cell.imgPhoto loadImage:[[arrayForPhotosData1 objectAtIndex:s] valueForKey:@"resolution_280_280"]];

    }
    [cell.ImgProfile loadImage:[[arrayForPhotosData1 objectAtIndex:s] valueForKey:@"profile_picture"]];
    [cell.lblUserName setText:[[arrayForPhotosData1 objectAtIndex:s] valueForKey:@"caption"]];
    [cell.lblForTime setText:[[arrayForPhotosData1 objectAtIndex:s] valueForKey:@"created_time"]];
    [cell.lblFullName setText:[[arrayForPhotosData1 objectAtIndex:s] valueForKey:@"Name" ]];
    [cell.btnForLike addTarget:self
                        action:@selector(addlikes:)
              forControlEvents:UIControlEventTouchUpInside];

    [cell.btnForLike  setImage:[UIImage imageNamed:@"like.png"] forState:UIControlStateNormal];
    [cell.btnForFavourite addTarget:self
                             action:@selector(addFavourite:)
                   forControlEvents:UIControlEventTouchUpInside];
    cell.btnForFavourite.tag=[[[arrayForPhotosData1  objectAtIndex:s]valueForKey:@"mediaid"] intValue];
    cell.btnForComment.tag=[[[arrayForPhotosData1  objectAtIndex:s]valueForKey:@"mediaid"] intValue];
    [cell.btnForComment addTarget:self action:@selector(addcomen:)forControlEvents:UIControlEventTouchUpInside];
    cell.imgPhoto.tag=[[[arrayForPhotosData1  objectAtIndex:s]valueForKey:@"mediaid"] intValue];
    [cell.imgPhoto addTarget:self action:@selector(addcoments:)forControlEvents:UIControlEventTouchUpInside];
    cell.btnForLike.tag=s;

    [cell.btnForLikeText setTitle:[NSString stringWithFormat:@"%@ Me gusta",[[arrayForPhotosData1 objectAtIndex:s] valueForKey:@"Totallikes"]] forState:UIControlStateNormal];

    [cell.btnForCommentText setTitle:[NSString stringWithFormat:@"%@ Commentarios",[[arrayForPhotosData1 objectAtIndex:s] valueForKey:@"TotalComment"]] forState:UIControlStateNormal];

    [cell.btnForLikeText addTarget:self
                            action:@selector(addlikes:)
                  forControlEvents:UIControlEventTouchUpInside];
    cell.btnForLikeText.tag=s;
    cell.btnForCommentText.tag=s;
    cell.btnForFavouritetext.tag=s;
    [cell.btnForFavouritetext addTarget:self
                                 action:@selector(addFavourite:)
                       forControlEvents:UIControlEventTouchUpInside];
    [cell.btnForCommentText addTarget:self action:@selector(addcomen:)forControlEvents:UIControlEventTouchUpInside];



    if([[[arrayForPhotosData1 objectAtIndex:s] valueForKey:@"FavoriteIsActive"] isEqualToString:@"true"])
    {

        [cell.btnForFavouritetext setTitle:[NSString stringWithFormat:@"%@ ",@"Favoritos"] forState:UIControlStateNormal];
    }
    [cell.btnForFavouritetext setTitle:[NSString stringWithFormat:@"%@ ",@"Favoritos"] forState:UIControlStateNormal];
    [arrayForCell addObject:cell];
}

[tableViewForPhotos reloadData];

и это мои отображаемые данные в ячейке

static NSString *simpleTableIdentifier1 = @"TableItem1";

PhotoCell *cell1 = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier1];

if (cell1 == nil) {
    cell1 = [[PhotoCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier1];
}

if ([arrayForCell count]>0) {
    cell1= [arrayForCell objectAtIndex:indexPath.row-1];

    cell1.selectionStyle=UITableViewCellSelectionStyleNone;
    return cell1;
}

После загрузки 50 изображений приложение получает предупреждение о полученной памяти.


person Manoj Jonna    schedule 28.12.2013    source источник


Ответы (1)


Нет необходимости проверять, равно ли значение cell1 нулю. Если вы зарегистрировали [класс PhotoCell], он никогда не будет нулевым.

Я полагаю, вы получаете предупреждение о памяти, потому что вы не используете ячейки повторно.

Здесь:

cell1= [arrayForCell objectAtIndex:indexPath.row-1];

Чего вы пытаетесь достичь?

person Matteo Pacini    schedule 28.12.2013
comment
Matteo Pacini В indexpath 0 я создал еще одну ячейку, поэтому я использую [indexpath.row-1] - person Manoj Jonna; 29.12.2013
comment
Проблема в следующем: вы удаляете из очереди повторно используемую ячейку (хранящуюся в cell1), а затем отбрасываете ее, когда управление достигает этой строки cell1= [arrayForCell objectAtIndex:indexPath.row-1] - person Matteo Pacini; 29.12.2013
comment
Итак, каково решение - person Manoj Jonna; 29.12.2013
comment
не могли бы вы сказать мне решение, я борюсь 5 дней - person Manoj Jonna; 29.12.2013
comment
То, как вы создаете ячейку, совершенно неправильно. Вы должны удалить их из очереди внутри cellForRowAtIndexPath. В парадигме MVC вы должны использовать массив моделей (например, данные для заполнения ваших ячеек) вместо массива ячеек. - person Matteo Pacini; 29.12.2013
comment
Я знаю это, но когда я прокручиваю изображения, они меняются местами, поэтому я использую вот так - person Manoj Jonna; 29.12.2013