Xcode,无法识别的选择器发送到实例 - 但在哪一行?
Posted
技术标签:
【中文标题】Xcode,无法识别的选择器发送到实例 - 但在哪一行?【英文标题】:Xcode, unrecognized selector sent to instance - but on what line? 【发布时间】:2014-07-31 14:35:08 【问题描述】:我在处理 JSON 时遇到了常见错误,
-[NSNull length]: unrecognized selector sent to instance 0x102aa8b50
我完全理解这一点,知道如何处理它等等(顺便说一句,这是一个聪明的方法https://***.com/a/16610117/294884)
我的问题是,在 Xcode 中,我如何判断是哪个 [length] 调用导致了问题??
Xcode 似乎只是显示它发生在“main 的第 7 行”-!
我不是 Xcode 调试专家,该怎么办?
顺便说一句,关于特定示例问题(NSNull 问题),我提请您注意 JR 在下面提到的令人惊叹的库:github.com/jrturton/NSJSONSerialization-NSNullRemoval
【问题讨论】:
在此处发布该崩溃日志的其余部分。 (你可以复制粘贴) 请发布整个崩溃日志。 可能对您有用:github.com/jrturton/NSJSONSerialization-NSNullRemoval 【参考方案1】:在 Xcode 的断点窗格中添加一个“异常断点”。
添加此代码后,代码引发的所有异常大多数情况下都会在正确的行上突出显示。
您将获得 NSNull
对象,因为 JSON 包含以下内容:
"someKey": null
然后,当您使用[json objectForKey:@"someKey"]
获取值时,它将返回一个NSNull
对象而不是nil
。因为nil
意味着 kay 不存在,这是它的。
您可以使用简单的 Objective-C 类别轻松解决此问题:
NSDictionary+NotNull.h
#import <Foundation/Foundation.h>
/*! This category extends NSDictionary to work around an issue with NSNull object.
*/
@interface NSDictionary (NotNull)
/*! @abstract Returns the value associated with a given key, but only if the value is not NSNull.
@param aKey The key for which to return the corresponding value.
@return The value associated with the given key, or nil if no value is associated with the key, or the value is NSNull.
*/
- (id)objectOrNilForKey:(id)aKey;
NSDictionary+NotNull.m
#import "NSDictionary+NotNull.h"
@implementation NSDictionary (NotNull)
- (id)objectOrNilForKey:(id)aKey
id object = [self objectForKey:aKey];
if (object == [NSNull null])
return nil;
return object;
@end
【讨论】:
嗨 RC ...“将在正确的行上突出显示,大部分时间”——它对我不起作用!啊! PS正如我提到的,我完全理解如何解决手头的问题;我只是想知道到底如何让 Xcode 告诉我它发生在哪里?!谢谢! 该死——它刚刚成功了! :) 显然 Xcode 害怕你 :) 我猜它“有时不起作用”对吗?谢谢! 这就是为什么我说“大部分时间”,因为有时它没有捕捉到正确的行或突出显示错误的行。 Gotchya - 我想这就是关键。只是待定,为什么会发生这种情况 - 有什么要理解的吗? 好吧,当您将从 JSON 检索到的对象传递给 Objective-C 框架深处的某个其他类或方法时,它正在调用length
方法,因为它认为传递的对象是NSString
.以上是关于Xcode,无法识别的选择器发送到实例 - 但在哪一行?的主要内容,如果未能解决你的问题,请参考以下文章
Xcode - presentViewController NSInvalidArgumentException:无法识别的选择器发送到实例
Swift 3:发送到实例 Xcode 8 的无法识别的选择器 [重复]
斯威夫特:“无法识别的选择器发送到实例”,Xcode 9.4.1
Swift 3 Xcode 8 - SwiftValue encodeWithCoder - 发送到实例的无法识别的选择器