[NSTaggedPointerString objectAtIndex:]:无法识别的选择器发送到实例
Posted
技术标签:
【中文标题】[NSTaggedPointerString objectAtIndex:]:无法识别的选择器发送到实例【英文标题】:[NSTaggedPointerString objectAtIndex:]: unrecognized selector sent to instance 【发布时间】:2015-10-26 12:07:22 【问题描述】:我的应用中的每个 UITextfield 都有问题。 每当 UITextfield 的实例成为第一响应者时,我的应用程序就会崩溃并显示以下错误消息。
关于应用的一些细节:
多语言支持 使用故事板 我的应用使用了user defined runtime attributes
,我正试图摆脱它(使用 PixateFreestyle SDK 来设置 UI 样式的遗留问题),但情节提要中仍有一些属性。
在真实设备上测试
我在[NSTaggedPointerString objectAtIndex:]
上设置了一个符号断点,但它似乎在应用程序本身崩溃之前没有发现错误
ios 8 SDK / Swift / Xcode 7.1(也发生在 Xcode 7 上)
来自 Xcode 的日志:
2015-10-26 12:49:16.034 MY_APP[1477:641273] -[NSTaggedPointerString objectAtIndex:]:
unrecognized selector sent to instance 0xa00000000006c6e2
2015-10-26 12:49:16.034 MY_APP[1477:641273] *** Terminating app due to uncaught
exception 'NSInvalidArgumentException',
reason: '-[NSTaggedPointerString objectAtIndex:]: unrecognised selector
sent to instance 0xa00000000006c6e2'
*** First throw call stack:
(0x18334cf48 0x1987f7f80 0x183353c5c 0x183350c00 0x183254cac
0x1832f8c4c 0x183292f84 0x18923ecbc 0x194b8c6f0 0x188924e8c 0x188924bb0
0x1889247b0 0x188924560 0x1889244cc 0x188cf00c8 0x188924310 0x188922b24
0x188ceb028 0x18890ad44 0x18890aad4 0x188ceaa4c 0x188cf2ef8 0x18890dac4
0x1889070b8 0x188906bec 0x18896809c 0x188968448 0x1889ef814 0x188aa01a8
0x188a9f65c 0x188e5b330 0x188a84b5c 0x18891285c 0x188e5c70c 0x1888d18b8
0x1888ce63c 0x1889106cc 0x18890fcc8 0x1888e04a4 0x1888de76c 0x183304544
0x183303fd8 0x183301cd8 0x183230ca0 0x18e7b4088 0x188948ffc 0x10033ae58
0x19903a8b8)
libc++abi.dylib: terminating with uncaught exception of type NSException
【问题讨论】:
【参考方案1】:您应该将数组设置为"AppleLanguages"
而不是字符串
换句话说:
替换这个
NSUserDefaults.standardUserDefaults().setObject( "en-BE", forKey: "AppleLanguages" )
有了这个:
NSUserDefaults.standardUserDefaults().setObject( ["en-BE"], forKey: "AppleLanguages" )
【讨论】:
有人知道这个问题的更多细节吗?我刚刚在 iOS 13 上发现了它,但在它运行良好之前。 天啊!!我的天啊!!从过去的两天开始,我一直在为那个奇怪的崩溃而苦苦挣扎,找不到解决方案,尝试了很多东西(Crashlytics,TestFairy)来获取错误日志,但没有运气。这就是解决方案!谢谢你,兄弟!!节省时间!!欣赏它。和 @savelichalex yupp 它适用于 iOS 13【参考方案2】:我在应用程序中删除这段代码后,该错误已得到修复。
NSUserDefaults.standardUserDefaults().removeObjectForKey("AppleLanguages")
NSUserDefaults.standardUserDefaults().setObject( "en-BE", forKey: "AppleLanguages" )
if( NSUserDefaults.standardUserDefaults().synchronize() )
// ...
【讨论】:
这不适用于 iOS 13。而Husam's answer 将适用于所有人。【参考方案3】:在较新版本的 Swift 上,设置语言如下:
UserDefaults.standard.set([selectedLanguage], forKey: "AppleLanguages")
我猜这是 Swift/iOS 上的一个错误。它仍然存在于 Swift 5.4、iOS 14.3 上。 希望苹果能解决这个问题。
【讨论】:
以上是关于[NSTaggedPointerString objectAtIndex:]:无法识别的选择器发送到实例的主要内容,如果未能解决你的问题,请参考以下文章
如何从 NSTaggedPointerString 中获取字符串? [复制]
[NSTaggedPointerString objectAtIndex:]:无法识别的选择器发送到实例