У меня есть игра с использованием комплекта спрайтов и объектива-C, первоначально разработанного с использованием Xcode 6 и iOS 7, но теперь она падает на устройствах iOS 9.Сценарий SpriteKit Obj C в iOS 9
Аварийная ситуация возникает, когда пользователь переходит от одного уровня к другому, и к сцене добавляется новый горизонтальный фон прокрутки (SKNode
).
Исключение:
резьбы 1 EXC_BAD_ACCESS (код = 1, адрес = 0x0)
Добавление горизонтальной прокрутки фона на сцене, когда изменение уровня:
// Array of planets to scroll
NSArray *parallaxBackgroundNames = @[@"bg_galaxy.png", @"bg_planetsunrise.png",
@"bg_spacialanomaly.png", @"bg_spacialanomaly2.png"];
CGSize planetSizes = CGSizeMake(200.0, 200.0);
// Initialize new back round scrolling node and ad to scene
_parallaxNodeBackgrounds = [[FMMParallaxNode alloc] initWithBackgrounds:parallaxBackgroundNames
size:planetSizes
pointsPerSecondSpeed:10.0];
// Position in center of screen
_parallaxNodeBackgrounds.position = CGPointMake(self.size.width/2.0, self.size.height/2.0);
// Method to randomly place planets as offsets to center of screen
[_parallaxNodeBackgrounds randomizeNodesPositions];
// EXCEPTION THROWN HERE when adding it to the layer
[self addChild:_parallaxNodeBackgrounds];
_parallaxNodeBackgounds
- SKSNode
экземпляр FMMParallaxNode
, инициализированный как:
- (instancetype)initWithBackgrounds:(NSArray *)files size:(CGSize)size pointsPerSecondSpeed:(float)pointsPerSecondSpeed
{
if (self = [super init])
{
_pointsPerSecondSpeed = pointsPerSecondSpeed;
_numberOfImagesForBackground = [files count];
_backgrounds = [NSMutableArray arrayWithCapacity:_numberOfImagesForBackground];
_randomizeDuringRollover = NO;
[files enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
SKSpriteNode *node = [SKSpriteNode spriteNodeWithImageNamed:obj];
node.size = size;
node.anchorPoint = CGPointZero;
node.position = CGPointMake(size.width * idx, 0.0);
node.name = @"background";
//NSLog(@"node.position = x=%f,y=%f",node.position.x,node.position.y);
[_backgrounds addObject:node];
[self addChild:node];
}];
}
return self;
}
Внесение каких-либо изменений в причину возникновения аварии.
EDIT: Мое понимание этого исключения заключается в том, что оно выбрасывается, если указатель указывает на память, которая была освобождена или указатель поврежден.
У меня нет ошибок, связанных с этим объектом при создании и анализе в Xcode, и я также создал новый указатель локально (исходный указатель - это экземпляр var), но по-прежнему получает ту же ошибку.
у вас есть циклическая ссылка происходит здесь, так что ваш FMMParallaxNode Никогда не deallocs, вам нужно добавить [бесхозный самостоятельно] в начале вашего блока – Knight0fDragon
Спасибо, я буду попробуй позже. Я попытался выпустить объект, но ошибка, вызванная компилятором, указала, что это не разрешено. Любая идея, почему это проблема только в ios9? – dancingbush
Более жесткие ограничения на 9, возможно, – Knight0fDragon