错误 fmdb 设置 label.text

Posted

技术标签:

【中文标题】错误 fmdb 设置 label.text【英文标题】:error fmdb set label.text 【发布时间】:2013-01-05 14:10:31 【问题描述】:

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

我该如何解决?提前致谢。

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];

【问题讨论】:

它包含键/值对,基本上是每行的列名和该列的值。 那么它不是一个 NSString。 Uilabel 的 text 属性需要一个字符串。 【参考方案1】:

问题在于结果集中的某些列不是文本值。正如我从您的other question 中回忆的那样,您的其中一个列是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 中输入的内容声明,但希望这能让您了解您可能会做什么。

【讨论】:

谢谢 Rob。太棒了。终于我可以看到数据了。我想问一下我是否像这样单独获取每个数据:NSString *id = [rs stringForColumn:@" ID”]; NSString *data = [rs stringForColumn:@"data"]; NSString *moreData = [rs stringForColumn:@"moreData"];标签.text = id; colNum++;标签.文本=数据; colNum++; label.text = 更多数据; [self.view addSubview:label]; x += [columnWidth floatValue]; BUt 它重复数据。我对此有更多的控制权。那么我该如何实现呢? 也许我们应该把它移到聊天中:chat.***.com/rooms/22239/… 不做这样的转换,你可以这样做:[label setText:[rs stringForColumn:colNum++]]; @DaveDeLong 也许,但是你无法控制price 字段的小数位数格式,或者你有什么。

以上是关于错误 fmdb 设置 label.text的主要内容,如果未能解决你的问题,请参考以下文章

是啥导致 Xcode 3.2 为 FMDB 提供 __unsafe_unretained 错误?

Swift CollectionView 显示错误

关于objectiveC 中的 label

c#设置wpf的label文字右对齐

使用 FMDB for iOS 锁定数据库

FMDB简单使用