У меня есть следующие сеттер определены в моем классе, который простирается UICollectionView
:Сбой при назначении локального объекта на DataSource из UICollectionView
// @interface ClipsDataSource : NSObject <UICollectionViewDataSource>
- (void)setProject:(Project *)project
{
_project = project;
ClipsDataSource *dataSource = [[ClipsDataSource alloc] initWithCollectionView:self];
dataSource.delegate = self;
dataSource.fetchedResultsController = project.clipsResultsController;
self.dataSource = dataSource;
}
Когда я запускаю мое приложение, я получаю следующее исключение:
-[CALayerArray numberOfSectionsInCollectionView:]: unrecognized selector sent to instance 0x174245490
Я понял, что указатель экземпляра - это адрес локальной переменной, которую я использовал в моем сеттере; имя класса очевидно случайное. Из этого «открытия» я решил, что объект был выпущен после назначения.
Обычно Xcode будет предупреждать меня об этих вопросах, говоря:
Назначения удерживаемого объекта к небезопасной собственности; объект будет выпущен после назначения.
И, конечно же, я вижу, что предупреждение, если я изменить мой код для этого:
self.dataSource = [[ClipsDataSource alloc] initWithCollectionView:self];
У меня есть два вопроса:
- Почему не Xcode показать предупреждение?
- Почему
.dataSource
считается небезопасным владельцем? Он определен как(nonatomic, assign)
.
Хмм, я не использую 'CollectionViewController' .. поэтому не уверен, как это применимо. –
Вы используете архитектуру MVC? – l0gg3r
Код, который я показал, касается только вещей, связанных с 'UICollectionView'; как таковой, он устанавливает себя как делегат источника данных для украшения ячеек. –