运行一个动作/只iPad的空气和iPad迷你装的资产配备Retina当雪碧套件崩溃 [英] Sprite Kit crash when running an action/loading an asset on only iPad Air and iPad mini with Retina
问题描述
我收到崩溃报告这是从视网膜迷你和iPad航设备的到来,而不是iPhone 5S。它发生在SpriteKit当有人对精灵这应该然后再拍显示在屏幕上水龙头。
I'm getting crash reports which are coming from retina mini and iPad Air devices, but not iPhone 5S. It occurs in SpriteKit when someone taps on a sprite which is supposed to then make another show up on screen.
我不能够重现这种非A7装置,使想知道,如果任何人都可以看看下面的崩溃日志,让我知道飞机坠毁的原因可能有呢?
I'm not able to reproduce this on a non-A7 device so wondered if anyone can take a look at the crash log below and let me know what the crash may be caused by?
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
这里的code我用它来创建,当另一个拍了拍显示年代的精灵。同样,这不会发生在任何东西,但A7的设备,而不是iPhone手机。此外同样code段是用来做同样的事情在其他精灵和那些不会崩溃。
Here's the code I use to create the sprite that's being displayed when the other is tapped on. Again this doesn't happen on anything but A7 devices and not on iPhones. Additionally this same code snippet is used to do the exact same thing on other sprites and does not crash on those.
if ([touchedSprite.name isEqualToString:@"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];
}];
}];
}];
}
感谢。
推荐答案
一些试验和错误我跟踪下来到具有切片图像,其中上,下,左,右片的大小为0后,我会说这是在iOS上的错误。尝试添加更多的填充你的形象,使您的切片不要触摸边缘。
After some trial and error I tracked this down to having a sliced image where the top, bottom, left or right slice has size 0. I'd say this is a bug on iOS. Try adding more padding to your image so that your slices don't touch the edges.
这篇关于运行一个动作/只iPad的空气和iPad迷你装的资产配备Retina当雪碧套件崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!