FMDB设置label.text错误



我使用下面的代码创建一个表。我得到这个错误[__NSCFNumber isEqualToString:]: unrecognized selector sent to instance at
label.text = rs[colNum++];

我如何修复它?提前感谢。

NSInteger rowNum = 0;
NSArray *columnWidths = @[@(50), @(120), @(75), @(75)];
CGFloat rowHeight = 24.0;
FMResultSet *rs = [db executeQuery:sql];
while ([rs next])
{
    CGFloat x = 0.0;
    NSInteger colNum = 0;
    for (NSNumber *columnWidth in columnWidths)
    {
        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(x,
                                                                    rowHeight * rowNum, 
                                                                    [columnWidth floatValue], 
                                                                    rowHeight)];
        label.textAlignment = NSTextAlignmentCenter;
        label.layer.borderColor = [UIColor blackColor].CGColor;
        label.layer.borderWidth = 1.0;
        label.text = rs[colNum++];
        [self.view addSubview:label];
        x += [columnWidth floatValue];
    }
    rowNum++;
}
[rs close];

问题是结果集中的一些列不是文本值。我记得你问的另一个问题,其中一列是rowid,你有一些文本列,然后你有一些数字列。所以不是:

label.text = rs[colNum++];

你可能应该有这样的内容:

id value = rs[colNum];
if ([[rs columnNameForIndex:colNum] isEqualToString:@"rowid"])
    label.text = [NSString stringWithFormat:@"%d", [value intValue]];
else if ([value isKindOfClass:[NSString class]])
    label.text = value;
else if ([value isKindOfClass:[NSNumber class]])
{
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    formatter.maximumFractionDigits = 2;
    formatter.numberStyle = NSNumberFormatterDecimalStyle;
    label.text = [formatter stringFromNumber:value]];
}
else
    label.text = [value description];
colNum++;

显然,您的逻辑将根据您的结果集中是否有rowid列,或者您希望为浮点数设置多少位小数等而改变。这完全取决于您在sql语句中放入的内容,但希望这能让您了解您可能要做的事情。

最新更新