初始化WKWebView致App崩溃:NSInvalidArgumentException异常求助
iOS App崩溃排查:-[NSTaggedPointerString count]: unrecognized selector sent to instance
崩溃概况
- 开发环境:Xcode 15.4
- 崩溃场景:多iOS版本测试时均触发未捕获异常导致崩溃
- 异常详情:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSTaggedPointerString count]: unrecognized selector sent to instance
崩溃栈追踪

排查步骤
- 定位核心问题:崩溃本质是代码给
NSTaggedPointerString(苹果优化后的NSString子类)调用了count方法,但NSString本身没有count实例方法——这个方法属于NSArray、NSDictionary这类集合类,说明代码里误把字符串当成了集合对象来处理。 - 锁定出错代码行:结合栈追踪截图,找到调用链中属于你项目的类和方法(截图里非系统框架的栈帧),定位到具体执行
count调用的代码行。 - 检查数据类型一致性:
- 排查接口返回:确认后端接口是否存在字段类型不匹配的情况(比如本该返回数组的字段,实际返回了空字符串或其他字符串值)。
- 检查类型转换:代码里是否有强制类型转换错误,比如把
NSString强转成NSArray/NSDictionary后调用count。
- 添加防御性校验:在调用
count前增加类型判断,避免异常:
// Objective-C示例 if ([targetObject isKindOfClass:[NSArray class]] || [targetObject isKindOfClass:[NSDictionary class]]) { NSUInteger count = [targetObject count]; // 正常业务逻辑 } else { NSLog("错误:目标对象类型异常,实际类型为%@", [targetObject class]); // 异常情况处理,比如设置默认值 }
// Swift示例 if let array = targetObject as? [Any] { let count = array.count // 正常逻辑 } else if let dict = targetObject as? [String: Any] { let count = dict.count // 正常逻辑 } else { print("错误:目标对象类型异常,实际类型为\(type(of: targetObject))") }
- 用Xcode调试快速定位:开启Xcode的异常断点(菜单栏
Debug > Breakpoints > Create Exception Breakpoint),崩溃触发时会直接停在出错的代码行,无需手动查找栈帧。
内容的提问来源于stack exchange,提问作者Fayyaz Hussain
相关产品推荐
相关产品推荐

