不寻常的stringWithFormat:参数

时间:2014-06-24 02:19:58

标签: ios objective-c nsstring mapkit

如果这是一个菜鸟问题,我道歉。

我一直关注有关mapkit的this教程,我偶然发现了这行代码

NSString *json = [NSString stringWithFormat:formatString,
                      centerLocation.latitude,
                      centerLocation.longitude,
                      0.5 * METERS_PER_MILE];

至少对我来说这是不寻常的原因是它缺少了包含%@标志的nsstring。该教程声称我们正在将纬度和经度信息添加到json中。

但是当我打印出formatString和json时,输出是相同的。

我以前从未见过以这种方式使用过的nsstrings。是否有隐藏的变量被设置?

有人可以向我解释这个nsstring对象(名为json)是如何包含这4个参数的吗?

3 个答案:

答案 0 :(得分:2)

代码中的其他地方,formatString必须定义如下:

NSString *formatString = @"latitude=%f, longitude=%f, %f = half the number of meters in a mile";

确保您的测试如下所示:

NSLog(@"the format is %@ and the json is %@", formatString, json);

他们不应该看起来一样。它们看起来相同的唯一方法是格式字符串不引用任何格式说明符,如下所示:

NSString *formatString = @"I'm a silly format with no percent format specifiers";
来自Apple的

Here's a good intro on the topic

答案 1 :(得分:1)

formatString实际上包含%@。可能是这样的:

NSString *formatString = @"lat: %f | lon: %f | half-meters-per-mile: %f";

NSString *json = [NSString stringWithFormat:formatString,
                  centerLocation.latitude,
                  centerLocation.longitude,
                  0.5 * METERS_PER_MILE];

(请注意,替换(%f)可能不正确,我猜)

至于它如何包含这四个参数,第一个参数之后的所有内容都是您想要添加到字符串中的值。第一个是一个字符串,说明放置这些值的位置。

答案 2 :(得分:1)

如果你查看教程,下面的代码行写在你发布的内容之上 -

 NSString *jsonFile = [[NSBundle mainBundle] pathForResource:@"command" ofType:@"json"];
 NSString *formatString = [NSString stringWithContentsOfFile:jsonFile encoding:NSUTF8StringEncoding error:nil];

从此处创建格式字符串,此文件将在教程的资源文件夹中提供。