У меня возникла небольшая проблема с удержанием смеси пользовательских классов и представлений UIImage в массиве.Они хранятся в массиве, и я использую:
if ([[fixtures objectAtIndex:index] isKindOfClass:[Fixture class]])
, чтобы различать, является ли это объектом UIIMage или Fixture.Мой исходный код для этого:
- (void) moveActionGestureRecognizerStateChanged: (UIGestureRecognizer *) recognizer
{
switch ( recognizer.state )
{
case UIGestureRecognizerStateBegan:
{
NSUInteger index = [fixtureGrid indexForItemAtPoint: [recognizer locationInView: fixtureGrid]];
emptyCellIndex = index; // we'll put an empty cell here now
// find the cell at the current point and copy it into our main view, applying some transforms
AQGridViewCell * sourceCell = [fixtureGrid cellForItemAtIndex: index];
CGRect frame = [self.view convertRect: sourceCell.frame fromView: fixtureGrid];
dragCell = [[FixtureCell alloc] initWithFrame: frame reuseIdentifier: @""];
if ([[fixtures objectAtIndex:index] isKindOfClass:[Fixture class]]) {
Fixture *newFixture = [[Fixture alloc] init];
newFixture = [fixtures objectAtIndex:index];
dragCell.icon = [UIImage imageNamed:newFixture.fixtureStringPath];
[newFixture release];
} else {
dragCell.icon = [fixtures objectAtIndex: index];
}
[self.view addSubview: dragCell];
}
}
Однако при перетаскивании ячейки, которая была объектом класса Fixture, я получал бы ошибки, такие как EXC_BAD_ACCESS или нераспознанный селектор, отправленный на экземпляр (который имеет смысл, как это былоотправив CALayerArray команду масштабирования.
Поэтому я установил точку останова для просмотра внутри массива fixtures. Здесь я увидел, что все UIImages были установлены на правильный тип класса, но также было:
- (CALayerArray *)
- (Fixture *)
- (NSObject *)
для позиций, в которых классы Fixture удерживались в массиве.Может ли кто-нибудь пролить свет на то, почему он это делает? Если вам нужна дополнительная информация, пожалуйста, не стесняйтесь спрашивать.
Денис