2011-07-03 31 views
1

我從照片庫中讀取圖像,並使用資產庫獲取元數據。然後我嘗試閱讀用戶評論exif標籤並將其顯示在我的文本視圖中。代碼在這裏:當從iPhone上的圖像讀取元數據時,<無效的CFStringRef>

[assetLibrary assetForURL:assestURL resultBlock:^(ALAsset *asset) { 
     ALAssetRepresentation *representation = [asset defaultRepresentation]; 
     NSMutableDictionary *metadataDictPhoto = (NSMutableDictionary*)[representation metadata]; 
     NSLog(@"This is the read metadata I believe: %@",[metadataDictPhoto description]); 

     metadataDictPhoto = metadataGlobal; 

    } failureBlock:^(NSError *error) { 
     NSLog(@"%@",[error description]); 
    }];   

    NSMutableDictionary *exifDictionary = (NSMutableDictionary*)[metadataGlobal objectForKey:(NSString*) kCGImagePropertyExifDictionary]; 

    NSString *comment = (NSString*)[exifDictionary valueForKey:(NSString*)kCGImagePropertyExifUserComment]; 

    textView.text = comment; 

當我運行它時,沒有崩潰但沒有任何顯示在textview中。我已經驗證了使用NSLogs從我的代碼收到的元數據是正確的,因爲我可以看到我的自定義exif用戶評論標籤。如果我把鼠標放在註釋上,它會給我錯誤。我無法擺脫這一點。

如何從元數據字典中讀取字符串並將其顯示在textView中?

編輯:DeePak注意到我混淆了一個賦值語句,我改變了它,但是沒有解決這個問題。雖然我正在研究這個,但我發現我的NSLogs顯示代碼是讀取元數據被傳遞,然後運行字典和字符串代碼,此時元數據不會被創建。然後它完成imagepicker委託函數,然後它最終進入完整的塊,然後運行代碼並輸出字典,然後我可以看到一切都是正確的。

我怎樣才能讓代碼直接運行或讓程序等待,直到assetforurl完成?

回答

0

我固定它通過將完成塊外部的代碼添加到完成塊內部並確保所有變量都被保存以供使用。這工作完美。

現在只有當我能弄清楚爲什麼它沒有正確寫入IPTC我會被設置。

1

您已將此作業翻轉過來。

metadataDictPhoto = metadataGlobal; 

你需要改變這

metadataGlobal = metadataDictPhoto; 

metadataGlobal可能是一個實例變量,這就是爲什麼它沒有崩潰,因爲它仍然是nil在這裏 -

NSMutableDictionary *exifDictionary = (NSMutableDictionary*)[metadataGlobal objectForKey:(NSString*) kCGImagePropertyExifDictionary]; 
+0

我改變了它,因爲你是正確的,但沒有解決我的問題。我用我的最新思路更新了我的問題(編輯)。該代碼在完成塊運行之前運行。我將如何暫停程序直至完成?有關更多詳情,請參閱我的問題編輯。 – SolidSnake4444

相關問題