【问题标题】:NSNumber unrecognized selectorNSNumber 无法识别的选择器
【发布时间】:2013-10-22 09:36:37
【问题描述】:

以下代码

  NSMutableString *a = [[NSMutableString alloc] init];
  NSMutableString *pivot     =[[NSMutableString alloc] init];
    int i= 0;

    for ( i = 0; i < [columns count]; i++)
    {


        if ([[[data objectForKey:pivot] class] isKindOfClass:[NSNumber class]])
        {
             sqlite3_bind_int(sqlStatement, i+1,[[columns objectAtIndex:i] integerValue]);

        }
        else
        {
            // NSLog(@"kind of class %@ %@",NSStringFromClass([[data objectForKey:pivot] class]) ,[data objectForKey:pivot]);
            [pivot setString:[columns objectAtIndex:i]];
            [a setString:(NSString*)[data objectForKey:pivot]];
            sqlite3_bind_text(sqlStatement, i+1, [a UTF8String], -1, 0);

        }
    }
    a     = nil;
    pivot = nil;

引发异常

 kind of class __NSCFConstantString
  -[__NSCFNumber length]: unrecognized selector sent to instance 0xc94c240

但是日志清楚地表明[data objectForKey:pivot] 是一个字符串!而test 变量始终为 0!

我检查了调试,实际上[data objectForKey:pivot] 是一个数字。事实上,我使用if(未显示)来检查它是否是数字。显然,if 失败了……

【问题讨论】:

    标签: ios exception nsstring nsnumber


    【解决方案1】:

    当您尝试以这种方式格式化时,您将class 转换为字符串,尝试使用NSStringFromClass(class) 从类中获取字符串名称:

     id pivotObject = [data objectForKey:pivot];
     NSLog(@"kind of class %@", NSStringFromClass([pivotObject class]));
     if ([pivotObject isKindOfClass:[NSString class]]) {
         [pivot setString:[columns objectAtIndex:i]];
         [a setString:pivotObject];
     }
    

    同样isKindOfClass: 返回BOOL 而不是int

    但最重要的是

    我认为[pivot setString:[columns objectAtIndex:i]] 行中的错误,因为在这里您更改了枢轴变量,然后从数据中检索它,但是由于枢轴变量已更改,因此您从数据字典中请求了不同的键。这你会得到另一个值。我的代码我只从数据中抓取一次 pivotData。

    【讨论】:

    • 你从[columns objectAtIndex:i]得到的对象是什么
    • 嗯..好的。我在代码中放了另一个变量来检查类。查看修改后的代码
    • @giuseppe 您使用的不是同一种 NSLog。使用 NSStringFromClass 你会看到对象的真实类。
    • 相同。没有任何变化 (@Abizem)。
    • @rckoenes。我使用了您的代码,但现在 setString 中的整数值变为空!
    猜你喜欢
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多