iOS从字典转换为NSString

时间:2013-02-15 22:05:23

标签: ios nsstring nsdictionary

我有一个NSMutableDictionary来保存图片中的EXIF元数据。 一个例子:

const CFStringRef kCGImagePropertyExifExposureTime;

我不想单独访问每个密钥,而只想将整个字典内容写入标签。 当我想将这些数据写入控制台时,我只会使用:

NSLog(@"EXIF Dic Properties: %@",EXIFDictionary );

工作正常,但如果我使用:

NSString *EXIFString = [NSString stringWithFormat:(@"EXIF Properties: %@", EXIFDictionary)];

我收到警告,结果不是字面意义的字符串,如果我尝试使用该字符串设置我的label.text,程序崩溃。

知道我的错误在哪里?

3 个答案:

答案 0 :(得分:4)

正如您所想,

[NSString stringWithFormat:(@"EXIF Properties: %@", EXIFDictionary)]不是一个带有两个参数的方法。这是一个带有一个参数的方法。这一个参数是(@"EXIF Properties: %@", EXIFDictionary),它使用comma operator并最终返回EXIFDictionary。所以从本质上说你有

[NSString stringWithFormat:EXIFDictionary]

这显然是错误的。这也是你收到警告的原因。该警告告诉您format参数不是字符串文字,因为将变量用作格式字符串是bug的常见来源。但更重要的是,这个论点根本不是一个字符串,所以它崩溃了。

删除括号,一切都会好的。这看起来像

[NSString stringWithFormat:@"EXIF Properties: %@", EXIFDictionary];

答案 1 :(得分:3)

  

我收到警告,结果不是字面意思

罗。你得到一个警告,说stringWithFormat:的格式字符串不是字符串 literal。那是因为你不知道逗号运算符(和一个可变函数)是如何工作的(这就是为什么一个在尝试制作iOS应用程序之前应该掌握C语言)。基本上你在这里有什么:

[NSString stringWithFormat:(@"EXIF Properties: %@", EXIFDictionary)]
由于逗号运算符的行为,

等同于

[NSString stringWithFormat:EXIFDictionary]

这显然是错误的。省略括号,就可以了:

[NSString stringWithFormat:@"EXIF Properties: %@", EXIFDictionary]

答案 2 :(得分:2)

您不需要这些括号:

NSString *EXIFString = [NSString stringWithFormat:@"EXIF Properties: %@", EXIFDictionary];