objective-c - 为什么 NSString 'forgetting' 是什么?

标签 objective-c ios

我希望得到一些帮助来理解为什么我需要重新转换我的变量,因为它从一开始就是一个字符串。

代码如下:

+ (BOOL)hasOperandComponents:(NSString *)operandToTest
{
    NSArray *componentsOfOperand = [[NSString stringWithFormat:@"%@",operandToTest] componentsSeparatedByString:@" "];
    if (componentsOfOperand.count>1) return YES; return NO;
}

如果我不使用对“stringWithFormat”的嵌入式调用,那么我会得到一个相当常见的错误:

-[__NSCFNumber componentsSeparatedByString:]: unrecognized selector sent to instance

我已经能够通过搜索其他 Q 和 A 找到此错误含义的答案以及如何避免它(参见我上面的代码)...但是没有很好的解释为什么我的 operandToTest 似乎“忘记”它是一个 NSString 并成为一个 _NSCFNumber。

我怀疑这是因为这是一个类方法...但是当 NSString *operandToTest 的特定实例被传递给类方法时,为什么这很重要?

请帮忙?

最佳答案

问题是您没有字符串开头。您作为 operandToTest 传递给方法的值实际上是一个 NSNumber*。您需要查看调用函数以找出原因。

关于objective-c - 为什么 NSString 'forgetting' 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9320526/

相关文章:

iphone - 从 NSData 获取质量较低的 UIImage?

ios - 当我尝试运行我的应用程序时 Xcode 6.1 崩溃

objective-c - iAd 横幅 View 委托(delegate)未调用方法

ios - ios中的选项卡栏打开一个选择器,而不是一个 View

ios - iPhone上的Safari不允许将文本输入字段

objective-c - 无法安装到 iPhone 模拟器

ios - Objective-c 方法队列

objective-c - 在 Swift 代码中使用 Objective-C 编写的委托(delegate)方法

ios - 在 iOS 上延迟重复的用户通知

ios - 如何增加 UISegmentedControl 总宽度?