0

以下代码

  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失败...

4

1 回答 1

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:返回一个BOOLnot int

但最重要的是

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

于 2013-10-22T09:40:27.890 回答