[NSCFNumber isEqualToString:]:无法识别的选择器发送到实例

Posted

技术标签:

【中文标题】[NSCFNumber isEqualToString:]:无法识别的选择器发送到实例【英文标题】:[NSCFNumber isEqualToString:]: unrecognized selector sent to instance 【发布时间】:2011-10-16 03:01:24 【问题描述】:

好的,我遇到了以下常见问题

[NSCFNumber isEqualToString:]: unrecognized selector sent to instance

但这次我不知道如何解决它。

这是viewDidLoad:中的声明

- (void)viewDidLoad 

    [super viewDidLoad];

    NSMutableArray *tempHours = [NSMutableArray array];
    for (int i = 0; i < 12; i++)  
        [tempHours addObject:[NSNumber numberWithInt:(i+1)]];
    
    self.hours = tempHours; // 'hours' is a synthesized NSArray property of the ViewController
    [tempHours release];

  // two more similar array declarations here


这是 UIPickerView 的代码方法,其中的东西会中断(例如,if 语句)

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 

    NSString *stringIndex = [NSString stringWithFormat:@"Row #%d", row];

    if(component == 0) 
        return stringIndex = [self.hours objectAtIndex:row];
    

    // more code for other components (of the same form) here

    return stringIndex;

我想我需要将我的 NSNumber 对象的 NSArray 类型转换为字符串。我该如何正确地使用该语句:

stringIndex = [self.hours objectAtIndex:row];

谢谢!

【问题讨论】:

注:你不应该在viewDidLoad 中释放tempHours。您不拥有它,因为您没有创建它。 【参考方案1】:
return [NSString stringWithFormat:@"%@",[self.hours objectAtIndex:row]];

【讨论】:

我遇到了同样的错误,但这对我不起作用。 stringValue 做了:***.com/a/9586079/956397【参考方案2】:

您将返回一个NSNumber,因为这是self.hours 中的内容。由于NSString 是预期的返回值,您应该通过以下方式创建一个字符串:

[NSString stringWithFormat:@"%@", [self.hours objectAtIndex:row]];

或重新评估您的意图。您是真的想以这种方式存储索引,还是想存储NSStrings

【讨论】:

我想存储数小时的数字。几分钟,我需要存储字符串,因为我在数字 1-9 前面加上 0。当我应用didSelect: 方法时,我必须稍后将这些值读回数字【参考方案3】:

如果有人遇到此问题并专门返回行的索引,那么您始终可以通过执行以下操作将 NSNumber 转换为 stringValue:

NSString *code = [[[JSONResponse objectForKey:@"meta"] objectForKey:@"code"] stringValue];

在方法末尾放置stringValue 会将任何内容转换为字符串,您也可以使用intValue

【讨论】:

【参考方案4】:

评论[tempHours release];//它是自动释放的对象。您没有将 and 与 alloc 或 copy 或 new 一起使用:

- (void)viewDidLoad 
    [super viewDidLoad];

    NSMutableArray *tempHours = [NSMutableArray array];

    for (int i = 0; i < 12; i++)  
        [tempHours addObject:[NSNumber numberWithInt:(i+1)]];
    

    self.hours = tempHours; // 'hours' is a synthesized NSArray property of the ViewController

    // [tempHours release];

你已经将 NSNumber 添加到数组中 所以 转换为字符串值:

stringIndex =[NSString stringWithFormat:@"%@",[self.hours objectAtIndex:row]];

【讨论】:

不,这仍然行不通。抛出此错误-[NSCFString stringValue]: unrecognized selector sent to instance 所以你已经在小时数组中添加了一些字符串。所以像上面的 stringwithformat 一样使用 是的,我也很感激!谢谢! @Vijay 让我们continue this discussion in chat

以上是关于[NSCFNumber isEqualToString:]:无法识别的选择器发送到实例的主要内容,如果未能解决你的问题,请参考以下文章

NSNumberFormatter 在 NSCFNumber getObjectValue 上泄漏

[__NSCFNumber 长度]:无法识别的选择器发送到实例 0xb000000000000113'

无法在 Swift 2 中将“__NSCFNumber”类型的值转换为“NSString”

类 NSCFNumber 自动释放,没有适当的池 - 只是泄漏

ios [__NSCFNumber 长度]:发送到实例的无法识别的选择器

使用 NSNumberFormatter 和 RestKit 将 NSCFNumber 转换为 NSNumber 时出错