2013-02-15 65 views
1

我有一個NSMutableDictionary存儲了一張圖片中的EXIF元數據。 一個例子:從字典到NSString的iOS轉換

const CFStringRef kCGImagePropertyExifExposureTime; 

而是單獨訪問每一個關鍵的,我只想寫全詞典內容到一個標籤。 當我想寫這個數據到控制檯我只想用:

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

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

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

我得到警告,結果不是字符串字面如果我嘗試使用該字符串來設置我的label.text,程序崩潰。

任何想法,我的錯誤是?

+1

刪除括號,它們是不必要的,並且混淆了NSString中編譯器和va_args在幕後發生的事情。當你寫出一個NSLog時,該字符串只在括號中,因爲它作爲參數傳遞給該函數。 – CodaFi 2013-02-15 22:08:52

回答

4

[NSString stringWithFormat:(@"EXIF Properties: %@", EXIFDictionary)]不是,你可能認爲這是一個有兩個參數的方法。這是一個有一個參數的方法。那一個參數是(@"EXIF Properties: %@", EXIFDictionary),它使用comma operator並最終返回EXIFDictionary。所以本質上你有

[NSString stringWithFormat:EXIFDictionary] 

這顯然是錯誤的。這也是你收到警告的原因。該警告告訴你格式參數不是字符串文字,因爲使用變量作爲格式字符串是錯誤的常見來源。但更重要的是,這個論點甚至不是一個字符串,所以它崩潰了。

刪除括號,一切都會好的。這看起來像

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

你不希望這些括號:

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

我得到警告,結果不是字符串字面

羅。您會收到警告,說明stringWithFormat:的格式字符串不是字符串這是因爲您不知道逗號運算符(以及可變參數函數)是如何工作的(這就是爲什麼在嘗試創建iOS應用程序之前應該掌握C語言的原因)。基本上,你在這裏是什麼:

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

是,由於逗號運算符的行爲,相當於

[NSString stringWithFormat:EXIFDictionary] 

這顯然是錯誤的。省略括號,它會很好:

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