2011-08-19 59 views
1

我看到这里,并没有看到我的相同情况。任何人愿意帮忙,谢谢。获取错误“格式不是字符串文字和格式参数”

我有一张分组表,显示我即将到来的赛季我的橄榄球队比赛。家庭游戏和离开游戏。

 NSString *message = [[NSString alloc] initWithFormat:rowValue]; 
Error Message: Format not a string literal and no format arguments 

真的不知道这是什么来自?

我使用了一个我在网上找到的教程。复制和粘贴整个事情。我只改变了我个人桌子所需的价值。这是我得到的唯一错误?任何帮助?

编辑:如果我需要提供更多的代码或任何东西,请告诉我!

谢谢!

- Anthony Lombardi

+0

什么类型的对象/变量是“rowValue”? –

回答

0

不太清楚你的意思。我会输入一个更大的代码块,这可能会有所帮助。

- (void)tableView:(UITableView *)tableView 
didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
NSArray *listData =[self.tableContents objectForKey: 
        [self.sortedKeys objectAtIndex:[indexPath section]]]; 
NSUInteger row = [indexPath row]; 
NSString *rowValue = [listData objectAtIndex:row]; 

NSString *message = [[NSString alloc] initWithFormat:rowValue]; 

UIAlertView *alert = [[UIAlertView alloc] 
         initWithTitle:@"You Better Be There Or Be Watching It!" 
         message:message delegate:nil 
         cancelButtonTitle:@"Go Knights!" 
         otherButtonTitles:nil]; 
[alert show]; 
[alert release]; 
[message release]; 
[tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 
0

有点老问题了,原来提问者很可能早已不复存在......但对于历史和未来的读者 - 这里发生了什么事情。

问题是因为您正在创建带有printf样式格式字符串的message - initWithFormat预计会有一个格式字符串,其中包含%字符,指示替换 - 例如, %f为浮点数,%d为整数等...

而不是静态格式字符串(字符串文字,直接在您的代码中定义),您已传入动态字符串。编译器很困惑,因为你没有传递任何参数。如果你的动态字符串包含%替换值,地狱之门就会崩溃,或者最好的是你的应用程序会崩溃。

由于没有参数的格式字符串没有意义,所以会引发错误。

要解决它,你可以用更换rowValuemessage线:

NSString *rowValue = [listData objectAtIndex:row]; 
NSString *message = rowValue; 

或者更简洁:

NSString *message = [listData objectAtIndex:row]; 

或者用新的Objective-C的文字语法和下标:

NSString *message = listData[row]; 
相关问题