我的视图中有一个UISwitch,我的设备和模拟器上的一切都适用于iOS 7,但是当我在iOS 6模拟器中运行我的应用程序时,我得到了一个奇怪的例外。
异常断点在此特定代码行触发:
self.mySwitch = [[UISwitch alloc] init];
使用以下输出:
-[__NSCFString count]: unrecognized selector sent to instance
这在某种程度上是模拟器中的错误吗?我不知道如何解决这个问题,目前我手边还没有iOS 6设备。
此时相关的堆栈跟踪是:
* thread #1: tid = 0x177e6, 0x0191be52 libobjc.A.dylib`objc_exception_throw, queue = 'com.apple.main-thread, stop reason = breakpoint 1.1
frame #0: 0x0191be52 libobjc.A.dylib`objc_exception_throw
frame #1: 0x01d144bd CoreFoundation`-[NSObject(NSObject) doesNotRecognizeSelector:] + 253
frame #2: 0x01c78bbc CoreFoundation`___forwarding___ + 588
frame #3: 0x01c7894e CoreFoundation`_CF_forwarding_prep_0 + 14
frame #4: 0x01c0ab10 CoreFoundation`CFArrayGetCount + 80
frame #5: 0x0106cc04 UIKit`__36-[_UISwitchInternalView _labelImage]_block_invoke_0 + 144
frame #6: 0x010a22fe UIKit`+[UIImage(_UIImageTintedInterfaceExtension) _cachedImageForKey:fromBlock:] + 131
frame #7: 0x0106cb6c UIKit`-[_UISwitchInternalView _labelImage] + 187
frame #8: 0x0106e6ed UIKit`-[_UISwitchInternalView _buildControl] + 1454
frame #9: 0x0106b7c1 UIKit`__39-[_UISwitchInternalView initWithFrame:]_block_invoke_0 + 36
frame #10: 0x00eb240c UIKit`+[UIView(Animation) _performWithoutAnimation:] + 82
frame #11: 0x0106b793 UIKit`-[_UISwitchInternalView initWithFrame:] + 420
frame #12: 0x0106f196 UIKit`-[UISwitch _commonInitNewLook] + 225
frame #13: 0x0106f741 UIKit`-[UISwitch initWithFrame:] + 143
frame #14: 0x0106f6ab UIKit`-[UISwitch init] + 118
编辑:我只使用两次关于UIAppearance的调用,即使我发表评论也会发生崩溃。
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor slubDarkBlue]];
[[UISearchBar appearance] setImage:[UIImage imageNamed:@"searchBarIcon"] forSearchBarIcon:UISearchBarIconSearch state:UIControlStateNormal];
答案 0 :(得分:0)
这没有多大意义,因为崩溃说明了将消息“count”发送到字符串。这指出悬挂参考的问题。如果您确定崩溃发生在[[UISwitch alloc] init]
内,请尝试[[UISwitch alloc] initWithFrame:CGRectZero];
您使用的是任何外观方法吗?
答案 1 :(得分:0)
开发者论坛中的Apple开发人员让我朝着正确的方向前进。事实证明这是一个本地化问题。
我做了:
[myUserDefaults setObject:inAppLanguage forKey:@"AppleLanguages"];
而不是:
[myUserDefaults setObject:@[inAppLanguage] forKey:@"AppleLanguages"];
其中inAppLanguage是一个像@“de”或@“en”的NSString。所以UISwitch遇到了单个NSString而不是NSStrings的NSArray。
答案 2 :(得分:-1)
听起来你正在注射一个NSString
,其中应该有一个NSArray
或任何可数的东西。
在任何情况下,它肯定不是模拟器错误,所以一定要仔细检查你的代码。它可能在先前的指令或初始化中。甚至可能在你的一个xib文件中。
此外,由于您在iOS 7和6中没有相同的行为,您可能需要检查您可能错过的任何API更改。