以下代码
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
失败了......
答案 0 :(得分: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]]
行中的错误,因为在这里你更改了pivot变量然后从数据中检索它,但是由于pivot变量被更改,你从数据字典中请求一个不同的键。这将获得另一个值。我的代码我只从数据中获取一次pivotData。