Sprite Kit crash lors de l'exécution d'une action / chargement d'un actif sur seulement iPad Air et iPad mini avec Retina

Je reçois des rapports d'accidents qui proviennent de la mini-rétine et des appareils iPad Air, mais pas de l'iPhone 5S. Il se produit dans SpriteKit quand quelqu'un tape sur un sprite qui est censé faire une autre apparition à l'écran.

Je ne suis pas en mesure de reproduire cela sur un appareil non-A7 si demandé si quelqu'un peut jeter un coup d'oeil sur le journal des accidents ci-dessous et laissez-moi savoir ce que le crash peut être causé par?

Exception Type: SIGSEGV Exception Codes: SEGV_ACCERR at 0xb000000c Crashed Thread: 0 Thread 0 Crashed: 0 libobjc.A.dylib 0x39b30b66 objc_msgSend + 5 1 CoreUI 0x3349bd0d -[CUIStructuredThemeStore renditionWithKey:] + 1050 2 CoreUI 0x334a50af -[CUINamedImage _renditionForSpecificKey:] + 168 3 CoreUI 0x334a50fd -[CUINamedImage image] + 18 4 UIKit 0x31b2ec01 -[_UIAssetManager imageNamed:scale:idiom:subtype:cachingOptions:] + 260 5 UIKit 0x31b2eaf7 -[_UIAssetManager imageNamed:scale:idiom:subtype:] + 38 6 UIKit 0x31b2eacd -[_UIAssetManager imageNamed:idiom:subtype:] + 44 7 UIKit 0x31b2ea9b -[_UIAssetManager imageNamed:idiom:] + 46 8 UIKit 0x31b75c45 +[UIImage imageNamed:inBundle:] + 56 9 SpriteKit 0x319fde65 __26-[SKTexture loadImageData]_block_invoke + 1282 10 SpriteKit 0x31a3798d SKSpinLockSync(int*, void ()() block_pointer) + 102 11 SpriteKit 0x319fd8fd -[SKTexture loadImageData] + 300 12 SpriteKit 0x31a007ef -[SKTexture size] + 42 13 SpriteKit 0x31a21585 -[SKSpriteNode initWithTexture:] + 180 14 SpriteKit 0x31a217e3 +[SKSpriteNode spriteNodeWithTexture:] + 146 15 White 0x000c6037 -[EggsOnShelfScene useStrawToolOn:] (EggsOnShelfScene.m:546) 16 White 0x000c4c9b -[EggsOnShelfScene useToolOnEgg:] (EggsOnShelfScene.m:400) 17 White 0x000d0929 -[EggsOnShelfScene handleTapGesture:] (EggsOnShelfScene.m:1746) 18 UIKit 0x31c99739 _UIGestureRecognizerSendActions + 194 19 UIKit 0x31b4418b -[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:] + 1138 20 UIKit 0x31ecfd4f ___UIGestureRecognizerUpdate_block_invoke + 44 21 UIKit 0x31b0b5cf _UIGestureRecognizerRemoveObjectsFromArrayAndApplyBlocks + 216 22 UIKit 0x31b09d33 _UIGestureRecognizerUpdate + 296 23 UIKit 0x31b429fd -[UIWindow _sendGesturesForEvent:] + 772 24 UIKit 0x31b423ab -[UIWindow sendEvent:] + 666 25 UIKit 0x31b17d79 -[UIApplication sendEvent:] + 196 26 UIKit 0x31b16569 _UIApplicationHandleEventQueue + 7114 27 CoreFoundation 0x2f359f1f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 12 28 CoreFoundation 0x2f3593e7 __CFRunLoopDoSources0 + 204 29 CoreFoundation 0x2f357bd7 __CFRunLoopRun + 628 30 CoreFoundation 0x2f2c2471 CFRunLoopRunSpecific + 524 31 CoreFoundation 0x2f2c2253 CFRunLoopRunInMode + 106 32 GraphicsServices 0x33fd02eb GSEventRunModal + 138 33 UIKit 0x31b77845 UIApplicationMain + 1136 34 White 0x000dcf27 main (main.m:8) 35 libdyld.dylib 0x3a02eab7 start + 0 

Voici le code que j'utilise pour créer l'image-object affichée lorsque l'autre est sur écoute. Encore une fois cela ne se produit sur rien d'autre que sur les appareils A7 et non sur les iPhones. De plus, ce même fragment de code est utilisé pour faire exactement la même chose sur les autres sprites et ne pas planter sur ceux-ci.

 if ([touchedSprite.name isEqualToSsortingng:@"Sad"]) { // Create the crop node if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { cropNode.position = CGPointMake(touchedSprite.position.x - 120, CGRectGetMinY(self.view.frame)); } else cropNode.position = CGPointMake(touchedSprite.position.x - 120 * IPHONERATIO, CGRectGetMinY(self.view.frame) - 20); SKSpriteNode *sadSprite = [SKSpriteNode spriteNodeWithTexture:[SKTexture textureWithImageNamed:@"SadSprite"]]; [sadSprite setName:@"sadSprite"]; [cropNode addChild:sadSprite]; sadSprite.position = CGPointMake(sadSprite.position.x, sadSprite.position.y + sadSprite.size.height / 2); SKSpriteNode *maskedImage = [SKSpriteNode spriteNodeWithTexture:[SKTexture textureWithImageNamed:@"SadSpriteMask"]]; [cropNode setMaskNode:maskedImage]; [self addChild:cropNode]; NSArray *slurpSounds = @[@"sadSprite01.caf", @"sadSprite02.caf", @"sadSprite03.caf"]; // Keep the sadSprite in the same position in relation to the egg [sadSprite runAction:[SKAction moveByX:0 y:-sadSprite.size.height duration:0.6]]; // Move the sadSprite into position [cropNode runAction:[SKAction moveByX:0 y:sadSprite.size.height duration:0.6] completion:^{ [cropNode runAction:[SKAction playSoundFileNamed:slurpSounds[self.toolSoundNumber] waitForCompletion:YES] completion:^{ [sadSprite runAction:[SKAction moveByX:0 y:sadSprite.size.height duration:0.6] completion:^{ [sadSprite removeFromParent]; }]; [cropNode runAction:[SKAction moveByX:0 y:-sadSprite.size.height duration:0.6] completion:^{ [cropNode removeFromParent]; }]; }]; }]; } 

Merci.

Après quelques essais et erreurs, j'ai retrouvé une image tranchée où la tranche supérieure, inférieure, gauche ou droite a la taille 0. Je dirais que c'est un bug sur iOS. Essayez d'append plus de rembourrage à votre image afin que vos tranches ne touchent pas les bords.