【问题标题】:Xcode call stackXcode 调用栈
【发布时间】:2013-09-16 14:11:29
【问题描述】:

在模拟器中运行 iOS 应用时遇到异常

2013-09-16 18:03:44.346 DEV[26529:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSDecimalNumber isEqualToString:]: unrecognized selector sent to instance 0xf98fc70'
*** First throw call stack:
(0x17bf012 0x1c38e7e 0x184a4bd 0x17aebbc 0x17ae94e 0x1b813 0x1c4c705 0x653920 0x6538b8 0x714671 0x714bcf 0x713d38 0x917213 0x1787afe 0x1787a3d 0x17657c2 0x1764f44 0x1764e1b 0x29db7e3 0x29db668 0x65065c 0x25c9 0x2505 0x1)

更新: 异常是由以下代码引起的:

if([self.media.idtype isEqualToString:IMAGETYPE])

其中 idtype 是 @property(retain, nonatomic) NSString *idtype;,IMAGETYPE 是 static NSString *VIDEOTYPE = @"2";

如何查看函数名称而不是地址?

【问题讨论】:

  • 或对所有异常使用异常断点。
  • 我相信我正在使用调试版本
  • 属性的声明不如这些属性的实例化重要。告诉我们你在哪里设置idtype
  • 也许你是对的!带有局部变量的调试窗口显示静态 self.media.idtype 是十进制的!但是我如何追踪我设置它的位置? idtype 是一个属性,我无法设置断点,因为 setter 和 getter 是由编译器生成的

标签: ios xcode lldb


【解决方案1】:

isEqualToString 可以比较两个 NSstring,而不是您正在比较的其他类型的数据,即 NSDecimalNumber 将您的 NSDecimalNumber 转换为 nsstring 然后执行此操作

NSDecimalNumber* dec1;
NSString* str;

str = dec1.stringValue;
     NSString *str2=@"world";
                [str isEqualToString:str2];

【讨论】:

  • 或者使用[NSDecimalNumber compare:]?
  • 当我尝试比较合成的 NSString* 属性和另一个 NSString* 时发生异常
  • @Ask 一旦确定了有问题的代码行(例如使用exception breakpoint),您应该使用该代码(并且可能是设置相关变量的代码)更新您的问题,因为错误清楚地告诉我们您正在尝试对 NSDecimalNumber 而非 NSString 的对象使用 isEqualToString 方法。
  • 您正在将您的 NSDecimalNumber 转换为 NString.right?如果是,首先检查是否包含 .或其他东西。如果是,则首先对该字符串进行编码,然后使用
【解决方案2】:

您在代码中的某些位置设置了属性 idtype (self.media.idtype) 的值。这一定是问题的根源:

可能的问题是从 Web 服务中提取内容,并且在解析时您可能会将其分配给 self.media.idtype 对象。

【讨论】:

    猜你喜欢
    • 2011-12-12
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 2012-03-21
    • 2020-10-30
    • 2012-03-19
    • 2020-10-25
    • 1970-01-01
    相关资源
    最近更新 更多