Я работаю над своим первым проектом с iOS и должен считаться новичком с Objective-C и xcode.Ошибка утечки памяти reloadData UICollectionView
Я создаю приложение, которое отображает наборы предметов, количество которых может варьироваться от 1 до 200 единиц. Я извлекаю элементы из RSS-каналов и разбираю XML. Я смог показать элементы в UITableView без проблем, и он работает так, как я этого хочу.
Приложение предназначено как для iPhone, так и для iPad (тестирование на 6.1), и моя цель - показать элементы в UICollectionView на iPad и в UITableView на iPhone. Я был в состоянии показать элементы в CollectionView, но когда я вызываю метод reloadData сбои приложения со следующей ошибкой:
«Тема 1: EXC_BAD_ACCESS (код = 1, адрес = 0,50c1ecd9)»
в моих поисках ответа я прочитал, что поворот на зомби может помочь мне найти проблему, это дает мне эту ошибку:
[CollectionCell релиз]: сообщение, отправленное высвобождены например 0xc177470
# Адрес Категория события Тип RefCt Timestamp Размер Ответственная библиотека Ответственный звонящий 1507 0 x16941940 CollectionCell Release 1 00: 21.272.192 0 UIKit - [UICollectionView reloadData] 1508 0x16941940 CollectionCell Release 0 00: 21.275.833 0 Фонд - [NSAutoreleasePool drain] 1509 0x16941940 CollectionCell Zombie -1 00: 21.279.332 0 Фонд - [ NSAutoreleasePool drain]
CollectionCell - это мой пользовательский класс UICollectionViewCell.
я обеспечу как код для UITableView и UICollectionView который я думаю, имеет самое непосредственное отношение к источнику проблемы:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"NewsCell_iPhone";
UITableViewCell *cell = nil;
cell = (NewsCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *nib = nil;
nib = [[NSBundle mainBundle] loadNibNamed:@"NewsCell_iPhone" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
UICollectionView:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"CollectionCell";
UICollectionViewCell *cell = (CollectionCell *)[collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
if (cell == nil) {
NSLog(@"Test");
NSArray *nib = nil;
nib = [[NSBundle mainBundle] loadNibNamed:@"CollectionCell_iPad" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
NewsCell (UITableViewCell)
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
}
return self;
}
CollectionCell (UICollectionViewCell)
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
// Initialization code
NSArray *arrayOfViews = [[NSBundle mainBundle] loadNibNamed:@"CollectionCell" owner:self options:nil];
if ([arrayOfViews count] < 1) {
return nil;
}
if (![[arrayOfViews objectAtIndex:0] isKindOfClass:[UICollectionViewCell class]]) {
return nil;
}
self = [arrayOfViews objectAtIndex:0];
}
return self;
}
Надеюсь, я включил то, что необходимо для решения этой проблемы. Я открыт для любых советов по улучшению моего кода.
Я не думаю, что вы включили все. Посмотрите на ошибку, она говорит [выпуск CollectionCell] <- я не вижу выпуска в вашем коде. –
Я не выпускаю CollectionCell нигде в моем коде, по крайней мере, не вручную, так как я не могу найти вызов для выпуска.Я предполагаю, что это как-то связано с методом initWithFrame, я взял его из учебника. – user2833970
ARC включен или выключен? –