2015-03-02 46 views
5

我試圖從用戶的相冊中加載所有圖像到我的應用程序的收藏視圖中,但是加載了幾個他們,應用程序將關閉並返回到主菜單。與XCode的連接也被斷開。 這不會發生在模擬器,但只有我正在測試的iPhone 4s。 出現崩潰之前,在出現的順序的錯誤消息,將照片中的圖像加載到收藏視圖會導致出現錯誤消息「連接資產被中斷或資產死亡」

  1. 接收的存儲器警告
  2. 連接到assetsd被中斷或assetsd死亡。

我已經拿起了我認爲會導致這個問題的代碼的幾個部分。

var imgFetchResult: PHFetchResult! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    let fetchOptions = PHFetchOptions() 
    fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)] 

    let fetchResult = PHAsset.fetchAssetsWithMediaType(PHAssetMediaType.Image, options: fetchOptions) 

    if fetchResult.count > 0 
    { 
     println("images found ? \(fetchResult.count)") 
     self.imgFetchResult = fetchResult 
    } 
} 

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
{ 
    println("cellForItemAtIndexPath") 
    let cell: PhotoThumbnailCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as PhotoThumbnailCollectionViewCell 

    println("indexpath is \(indexPath.item)") 

    if(indexPath.item == 0) 
    { 
     cell.backgroundColor = UIColor.redColor() //temp placeholder for camera image 
    } 
    else 
    { 
     let asset: PHAsset = self.imgFetchResult[indexPath.item] as PHAsset 
     PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: PHImageManagerMaximumSize, contentMode: .AspectFill, options: nil, resultHandler: {(result, info) in cell.setThumbnailImage(result) 
     }) 
    } 

    return cell 
} 

我相信我需要釋放內存,但不知道該怎麼做。它似乎是正在加載到集合視圖的單元格中的圖像。

我也發現收集視圖不超過4張圖片。在第四張圖像後,發生崩潰。此外,圖像未按順序加載。

回答

8

的問題在這行代碼

PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: PHImageManagerMaximumSize, contentMode: .AspectFill, options: nil, resultHandler: {(result, info) in cell.setThumbnailImage(result) 
}) 

參數被發現,targetSize傳遞這是罪魁禍首的PHImageManagerMaximumSize值。我將其更改爲CGSize(width: 105, height: 105)解決了問題。

根據文檔PHImageManagerMaximumSize

當您使用PHImageManagerMaximumSize選項,照片提供了可用於資產 最大的圖像,不進行縮放或裁剪。 (即忽略resizeMode選項。)

所以,這就解釋了這個問題。我相信如果它是一個單一的圖像,它不應該是一個問題,但如果它是很多圖像,該設備將耗盡內存。

我希望這可以幫助其他人。

+1

這個驚人的,請你告訴我,我有多大的尺寸?正如你告訴我給出了105和105,但圖像不清晰,我必須通過什麼值來顯示圖像質量 – 2017-02-14 11:01:11

+0

你可以這樣做: let targetSize = CGSize(width:asset.pixelWidth/2,height:asset。 pixelHeight/2) – jamesthakid 2017-10-10 17:10:09

0

正如@winhung所說,對我而言,它的規模也是如此。我所做的就是將目標尺寸減小一半,例如:

let asset: PHAsset = self.imgFetchResult[indexPath.item] as PHAsset 
let mytargetSize = CGSize(width: asset.pixelWidth/2, height: asset.pixelHeight/2) 

PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: mytargetSize, contentMode: .AspectFill, options: nil, resultHandler: {(result, info) in cell.setThumbnailImage(result) 
}) 
相關問題