使用Retina运行动作/仅在iPad Air和iPad mini上加载资源时,Sprite Kit会崩溃

 葛妹秀 发布于 2023-01-20 12:55

我收到来自视网膜迷你和iPad Air设备的崩溃报告,但不是iPhone 5S.它出现在SpriteKit中,当有人点击一个精灵,然后该精灵应该再次出现在屏幕上.

我无法在非A7设备上重现这一点,所以想知道是否有人可以查看下面的崩溃日志,让我知道崩溃可能是由什么引起的?

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

这是我用来创建在点击另一个时显示的精灵的代码.除了A7设备之外,其他任何事情都不会发生,而不是在iPhone上.另外,这个相同的代码片段用于在其他sprite上执行完全相同的操作,并且不会在这些sprite上崩溃.

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];
            }];
        }];
    }];
}

谢谢.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有