1

以下のコードを使用してテーブルを作成しています。このエラー[__NSCFNumber isEqualToString:]: unrecognized selector sent to instanceは次の場所で発生します。
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];
4

1 に答える 1

1

問題は、結果セットの一部の列がテキスト値ではないことです。これが由来する他の質問から思い出すように、列の1つは、であり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ステートメントに何を入力するかによって異なりますが、これでアイデアが得られることを願っています。あなたがするかもしれないことの。

于 2013-01-05T14:27:22.340 に答える