获取错误“格式化不是字符串文字,没有格式参数”

时间:2011-08-19 20:58:36

标签: xcode nsstring string-formatting

我在这里看了看并没有看到同样的情况。任何愿意帮助的人,谢谢。

我有一个Grouped Table,显示我即将到来的赛季的足球队比赛。主场比赛和客场比赛。

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

甚至不确定这是什么来源?

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

编辑:如果我需要提供更多代码或任何内容,请告诉我们!

谢谢!

- Anthony Lombardi

2 个答案:

答案 0 :(得分: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];
}

答案 1 :(得分: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];