2013-01-05 42 views
1

我使用下面的代碼創建一個table.I得到這個錯誤[__NSCFNumber isEqualToString:]: unrecognized selector sent to instance
label.text = rs[colNum++];錯誤FMDB設置label.text

如何解決呢?提前致謝。

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

什麼是結果集? –

+0

它包含鍵/值對基本上是列名稱和每列該列的值。 –

+0

然後它不是一個NSString。 Uilabel的文本屬性需要一個字符串。 –

回答

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聲明中的內容,但希望這可以讓你瞭解你可能做什麼。

+0

感謝Rob.That真棒。最後我可以看到數據。我想問一下,如果我將每個數據分別如下所示:** NSString * id = [rs stringForColumn:@「id」]; NSString * data = [rs stringForColumn:@「data」]; NSString * moreData = [rs stringForColumn:@「moreData」]; label.text = id; colNum ++; label.text = data; colNum ++; label.text = moreData; [self.view addSubview:label]; x + = [columnWidth floatValue]; ** BUt重複數據。我對此有更多的控制。那麼我該如何實現這種方式? –

+0

也許我們應該將其轉變爲聊天:http://chat.stackoverflow.com/rooms/22239/chat-with-jacob-wood-re-fmdb-result-sets – Rob

+0

而不是像這樣做轉換,你可以do:'[label setText:[rs stringForColumn:colNum ++]];' –