在运行iOS7时,我在swift中遇到了NSClassFromString的大麻烦。
在名为Common.swift的swift文件中,我有以下变量:
let IS_IOS8: Bool = NSClassFromString("UIAlertController") != nil
我在我的应用程序中使用它来测试它是否在iOS8中运行。
问题是它会导致iOS7崩溃,但仅限于真实设备而不是模拟器上。 由于我没有任何实际的设备,我只使用模拟器测试了我的应用程序,现在我的用户报告崩溃了这样的iOS版本。
崩溃报告说:
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x39a116d8 0x399ff000 + 75480
1 AppName CLSSignalHandler (in AppName) + 188
2 libsystem_platform.dylib 0x39a75720 0x39a72000 + 14112
3 AppName globalinit_func0 (in AppName) (Common.swift:10)
4 AppName globalinit_func0 (in AppName) (Common.swift:10)
5 libswiftCore.dylib 0x005f77c4 0x464000 + 1652676
6 libdispatch.dylib 0x39946d3c 0x39946000 + 3388
7 libdispatch.dylib 0x3994796a 0x39946000 + 6506
8 libswiftCore.dylib 0x005f77ae 0x464000 + 1652654
9 AppName AppName.mutableAddressor : Swift.Bool (in AppName) (Common.swift:0)
10 AppName AppName.BSMessageBarView.init (AppName.BSMessageBarView.Type)(frame : C.CGRect, style : AppName.BSMessageBarViewStyle) -> AppName.BSMessageBarView (in AppName) (BSMessageBarView.swift:36)
11 AppName AppName.BSMessageBarView.__allocating_init (AppName.BSMessageBarView.Type)(frame : C.CGRect, style : AppName.BSMessageBarViewStyle) -> AppName.BSMessageBarView (in AppName) (BSMessageBarView.swift:0)
12 AppName AppName.BSNavigationController.viewDidLoad (AppName.BSNavigationController)() -> () (in AppName) (BSNavigationController.swift:25)
13 UIKit 0x314faa4e 0x314eb000 + 64078
14 UIKit 0x314fa80c 0x314eb000 + 63500
15 UIKit 0x31501484 0x314eb000 + 91268
16 UIKit 0x314fedd4 0x314eb000 + 81364
17 UIKit 0x31568a4c 0x314eb000 + 514636
18 UIKit 0x315656e0 0x314eb000 + 501472
19 UIKit 0x3155fcc4 0x314eb000 + 478404
20 UIKit 0x314fbc92 0x314eb000 + 68754
21 UIKit 0x314fadf4 0x314eb000 + 65012
22 UIKit 0x3155f400 0x314eb000 + 476160
23 GraphicsServices 0x33b68b52 0x33b5e000 + 43858
24 GraphicsServices 0x33b6873a 0x33b5e000 + 42810
25 CoreFoundation 0x2ec91844 0x2ebf2000 + 653380
26 CoreFoundation 0x2ec917de 0x2ebf2000 + 653278
27 CoreFoundation 0x2ec8ffaa 0x2ebf2000 + 647082
28 CoreFoundation 0x2ebfa764 0x2ebf2000 + 34660
29 CoreFoundation 0x2ebfa546 0x2ebf2000 + 34118
30 UIKit 0x3155e626 0x314eb000 + 472614
31 UIKit 0x3155988c 0x314eb000 + 452748
32 AppName main (in AppName) (AppDelegate.swift:0)
33 libdyld.dylib 0x3995bab4 0x3995a000 + 6836
其中BSMessageBarView
是UIView
的子类,BSNavigationController
是UINavigationController
的子类。
Morover,在BSMessageBarView.swift
:36(崩溃报告的第10行)我正在测试IS_IOS8
是真还是假:
if IS_IOS8 {
...
} else {
...
}
我不知道为什么会这样。
感谢您的帮助。
安德烈