2014-11-21 35 views
0

有反正我可以使用從"PHImageFileURLKey"返回的路徑進入照片庫並檢索圖像?PhotoKit iOS8 - 使用「PHImageFileURLKey」檢索圖像

返回的路徑格式如下:

"file:///var/mobile/Media/DCIM/102APPLE/IMG_2607.JPG" 

我的計劃是這樣的路徑存儲在數據庫中,並用它來獲取圖像,當我需要把它找回來。

任何幫助表示讚賞。謝謝!

回答

8

我認爲你從URL中檢索Photo Kit資源的解決方案是錯誤的。

這裏是我會做什麼(假設你有機會獲得PHAsset):

商店localIdentifier:

PHAsset *asset = /*Your asset */ 
NSString *localIdentifier = asset.localIdentifier; 

//Now save this local identifier, or an array of them 

當它的時間來檢索他們,你只需做:

PHFetchResult *savedAssets = [PHAsset fetchAssetsWithLocalIdentifiers:savedLocalIdentifiers options:nil]; 
[savedAssets enumerateObjectsUsingBlock:^(PHAsset *asset, NSUInteger idx, BOOL *stop) { 
    //this gets called for every asset from its localIdentifier you saved 
}]; 

如果您只能訪問「PHImageFileURLKey」,則忽略此答案。

2

這沒有記錄,所以我會強烈建議反對使用該URL的任何東西比原型應用程序。這就是說,這確實出現了工作:

dispatch_queue_t queue = dispatch_queue_create("photoLoadQueue", 0); 
dispatch_async(queue, ^{ 
    NSURL *privateUrl = [NSURL URLWithString:@"file:///var/mobile/Media/DCIM/102APPLE/IMG_2607.JPG"; 
    NSData *imageData = [NSData dataWithContentsOfURL:privateUrl]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     self.imageView.image = [UIImage imageWithData:imageData]; 
    }); 
}); 

當然就需要更換用於啓動的URL以一個有效期爲你的手機串。

這樣做可能會帶來很多問題 - 這不僅僅是框架的用意。下面是一些我的頭頂部:

  1. 當在模擬器中運行,根路徑變化規律的應用程序的啓動之間,因此,如果您存儲這樣absoluteUrls你的數據庫將很快成爲全死的URL。這至少可以說是不方便的。
  2. 更糟糕的是,圖像的URL可能會在真實設備上發生變化 - 您無法控制它,並且一旦它們發生變化,它就是您的應用程序的錯誤,使用戶重新選擇它們或其他任何設備。
  3. 你不會發現有關照片來自PHAsset的變化。
  4. 這可能會繞過用戶對照片訪問權限 - 如果您的應用訪問照片的權限被撤銷會發生什麼情況?然而,這可能是存儲照片以供以後使用的很多方法的問題。
  5. 您不控制該文件 - 如果用戶刪除它,該怎麼辦?

如果我是你,我會正確地從照片框架檢索圖像,使用PHImageManager requestImageForAsset: targetSize: contentMode: options: resultHandler:,並將其存儲在應用程序的目錄中的文件在你用它做不管什麼一個合理的解決方案。這仍然不會改變您的資產,但這是一個很好的解決方案。

如果你想存儲資產本身,並且只在實際需要時請求圖像,可能值得調查transient asset collections,儘管我沒有使用它們,因此可能無法滿足你的需求。

+1

感謝您的詳細回覆。在閱讀你所列出的潛在問題後,我決定不採用這種方法。相反,我使用PHObject上的「LocalIdentifier」屬性來唯一標識圖像並從庫中獲取圖像。我能夠使用fetchAssetsWithLocalIdentifiers:方法讓他們回來。 – pnavk 2014-11-24 15:32:46

+1

謝謝,我沒有看到,也讓我改進我的應用程序!我喜歡這樣。 – 2014-11-25 12:38:25

+0

您的代碼導致「Operation not permitted」錯誤。 – Mojo66 2016-11-24 21:53:33