我想今天发布我的游戏应用程序(使用Swift - xCode GTM和Sprite工具包框架)。我的应用程序在模拟器上工作正常但是当我在真实设备上试用它 - iPhone 4 iOS 7时,它在启动时崩溃:
class func unarchiveFromFile(file : NSString) -> SKNode? {
let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks")//CRASH!
var sceneData = NSData.dataWithContentsOfFile(path!, options: .DataReadingMappedIfSafe, error: nil)
var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)
archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as GameScene
archiver.finishDecoding()
return scene
}
}
这是我的崩溃日志:
Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x000000000000defe
Triggered by Thread: 0
Thread 0 Crashed:
0 libswiftCore.dylib 0x003347d0 0x1b6000 + 1566672
1 libswiftCore.dylib 0x001f3a64 0x1b6000 + 252516
2 MyApp 0x000d2904 0xc4000 + 59652
3 MyApp 0x000d36d8 0xc4000 + 63192
4 MyApp 0x000d4214 0xc4000 + 66068
5 MyApp 0x000d4dc4 0xc4000 + 69060
6 UIKit 0x3079e5fe -[UIViewController loadViewIfRequired] + 514
7 UIKit 0x3079e3bc -[UIViewController view] + 20
8 UIKit 0x307a5088 -[UIWindow addRootViewControllerViewIfPossible] + 60
9 UIKit 0x307a275e -[UIWindow _setHidden:forced:] + 302
10 UIKit 0x3080da50 -[UIWindow makeKeyAndVisible] + 56
11 UIKit 0x3080a80c -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1652
12 UIKit 0x30804d0e -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 710
13 UIKit 0x3079f6a2 -[UIApplication handleEvent:withNewEvent:] + 3126
14 UIKit 0x3079e9a4 -[UIApplication sendEvent:] + 68
15 UIKit 0x308044f8 _UIApplicationHandleEvent + 660
16 GraphicsServices 0x32c3670a _PurpleEventCallback + 606
17 GraphicsServices 0x32c362f2 PurpleEventCallback + 30
18 CoreFoundation 0x2dff39e4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 32
19 CoreFoundation 0x2dff397e __CFRunLoopDoSource1 + 342
20 CoreFoundation 0x2dff2152 __CFRunLoopRun + 1394
21 CoreFoundation 0x2df5cce2 CFRunLoopRunSpecific + 518
22 CoreFoundation 0x2df5cac6 CFRunLoopRunInMode + 102
23 UIKit 0x30803794 -[UIApplication _run] + 756
24 UIKit 0x307fea3c UIApplicationMain + 1132
25 MyApp 0x000da594 0xc4000 + 91540
26 MyApp 0x000da5d0 0xc4000 + 91600
27 libdyld.dylib 0x38858ab4 start + 0
Thread 1:
0 libsystem_kernel.dylib 0x388fc83c kevent64 + 24
1 libdispatch.dylib 0x38847e08 _dispatch_mgr_invoke + 228
2 libdispatch.dylib 0x388373ee _dispatch_mgr_thread$VARIANT$up + 34
Thread 2:
0 libsystem_kernel.dylib 0x3890fc7c __workq_kernreturn + 8
1 libsystem_pthread.dylib 0x38975dc6 _pthread_wqthread + 306
2 libsystem_pthread.dylib 0x38975c80 start_wqthread + 4
Thread 3:
0 libsystem_kernel.dylib 0x3890fc7c __workq_kernreturn + 8
1 libsystem_pthread.dylib 0x38975dc6 _pthread_wqthread + 306
2 libsystem_pthread.dylib 0x38975c80 start_wqthread + 4
Thread 4 name: WebThread
Thread 4:
0 libsystem_kernel.dylib 0x3890efa8 __psynch_mutexwait + 24
1 libsystem_pthread.dylib 0x38975f0a _pthread_mutex_lock + 302
2 WebCore 0x35e2f138 _WebTryThreadLock(bool) + 104
3 WebCore 0x35e2f0ba WebRunLoopLock(__CFRunLoopObserver*, unsigned long, void*) + 42
4 CoreFoundation 0x2dff41d2 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 18
5 CoreFoundation 0x2dff1b74 __CFRunLoopDoObservers + 280
6 CoreFoundation 0x2dff1f84 __CFRunLoopRun + 932
7 CoreFoundation 0x2df5cce2 CFRunLoopRunSpecific + 518
8 CoreFoundation 0x2df5cac6 CFRunLoopRunInMode + 102
9 WebCore 0x35e2dbae RunWebThread(void*) + 414
10 libsystem_pthread.dylib 0x38977c1a _pthread_body + 138
11 libsystem_pthread.dylib 0x38977b8a _pthread_start + 98
12 libsystem_pthread.dylib 0x38975c8c thread_start + 4
Thread 5 name: com.apple.NSURLConnectionLoader
Thread 5:
0 libsystem_kernel.dylib 0x388fca8c mach_msg_trap + 20
1 libsystem_kernel.dylib 0x388fc888 mach_msg + 44
2 CoreFoundation 0x2dff37c6 __CFRunLoopServiceMachPort + 150
3 CoreFoundation 0x2dff1eec __CFRunLoopRun + 780
4 CoreFoundation 0x2df5cce2 CFRunLoopRunSpecific + 518
5 CoreFoundation 0x2df5cac6 CFRunLoopRunInMode + 102
6 Foundation 0x2e996492 +[NSURLConnection(Loader) _resourceLoadLoop:] + 314
7 Foundation 0x2ea0be22 __NSThread__main__ + 1058
8 libsystem_pthread.dylib 0x38977c1a _pthread_body + 138
9 libsystem_pthread.dylib 0x38977b8a _pthread_start + 98
10 libsystem_pthread.dylib 0x38975c8c thread_start + 4
Thread 6:
0 libsystem_kernel.dylib 0x388fca8c mach_msg_trap + 20
1 libsystem_kernel.dylib 0x388fc888 mach_msg + 44
2 CoreFoundation 0x2dff37c6 __CFRunLoopServiceMachPort + 150
3 CoreFoundation 0x2dff1eec __CFRunLoopRun + 780
4 CoreFoundation 0x2df5cce2 CFRunLoopRunSpecific + 518
5 CoreFoundation 0x2df5cac6 CFRunLoopRunInMode + 102
6 libAVFAudio.dylib 0x2cfe1584 GenericRunLoopThread::Entry(void*) + 124
7 libAVFAudio.dylib 0x2cfd5a94 CAPThread::Entry(CAPThread*) + 176
8 libsystem_pthread.dylib 0x38977c1a _pthread_body + 138
9 libsystem_pthread.dylib 0x38977b8a _pthread_start + 98
10 libsystem_pthread.dylib 0x38975c8c thread_start + 4
Thread 7:
0 libsystem_kernel.dylib 0x3890fc7c __workq_kernreturn + 8
1 libsystem_pthread.dylib 0x38975dc6 _pthread_wqthread + 306
2 libsystem_pthread.dylib 0x38975c80 start_wqthread + 4
Thread 8 name: JavaScriptCore::BlockFree
Thread 8:
0 libsystem_kernel.dylib 0x3890ef38 __psynch_cvwait + 24
1 libsystem_pthread.dylib 0x38977224 _pthread_cond_wait + 536
2 libsystem_pthread.dylib 0x38978040 pthread_cond_timedwait + 40
3 JavaScriptCore 0x2ef80eb8 WTF::ThreadCondition::timedWait(WTF::Mutex&, double) + 104
4 JavaScriptCore 0x2ef80ce4 JSC::BlockAllocator::blockFreeingThreadMain() + 88
5 JavaScriptCore 0x2ef7e3a8 WTF::wtfThreadEntryPoint(void*) + 12
6 libsystem_pthread.dylib 0x38977c1a _pthread_body + 138
7 libsystem_pthread.dylib 0x38977b8a _pthread_start + 98
8 libsystem_pthread.dylib 0x38975c8c thread_start + 4
Thread 0 crashed with ARM Thread State (32-bit):
r0: 0x00000000 r1: 0x00000000 r2: 0x00362ac4 r3: 0x000000b6
r4: 0x00362ac4 r5: 0x00000000 r6: 0x145c97b0 r7: 0x27d3d364
r8: 0x1456eb50 r9: 0x00000fff r10: 0x145c97b0 r11: 0x00362ac0
ip: 0x3a5431d0 sp: 0x27d3d354 lr: 0x00334183 pc: 0x003347d0
cpsr: 0x60000030
答案 0 :(得分:1)
pathForResource()
函数返回String?
,表示(因为它是可选的),可能无法返回任何值。我猜测该方法正在返回nil
,但由于您使用let
语句对其进行了分配,因此应用程序崩溃了。
我有点惊讶它直接在那条线上坠毁了。您应该可以使用nil
关键字指定let
。在任何情况下,如果值为nil
,当您强行打开可选项时,您的下一行肯定会遇到崩溃:
var sceneData = NSData.dataWithContentsOfFile(path!, options: .DataReadingMappedIfSafe, error: nil)
^ here
试试这个:
if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {
/* ... (your code using path) ... */
} else {
NSLog("Unable to locate path for resource: \(file)")
}
我有一种感觉,你会在发布时看到NSLog()
输出。