当我尝试使用此swift库(https://github.com/piemonte/player)播放多个视频时,出现此错误。不知道它是否与该播放器,照片框架有关,或与之相关。

发生的是,我有一个 View ,将显示照片或视频。一切都运行了好几次,直到播放了一些视频,然后弹出此消息,随后所有视频无法播放,而在您所处的位置,您只会看到黑屏,然后出现内存使用错误。

我正在使用一个名为SwipeView的库,这是一些相关的代码,可能会有所帮助。

func swipeView(swipeView: SwipeView!, viewForItemAtIndex index: Int, reusingView view: UIView!) -> UIView! {
    let asset: PHAsset = self.photosAsset[index] as PHAsset

    // Create options for retrieving image (Degrades quality if using .Fast)
    //        let imageOptions = PHImageRequestOptions()
    //        imageOptions.resizeMode = PHImageRequestOptionsResizeMode.Fast
    var imageView: UIImageView!

    let screenSize: CGSize = UIScreen.mainScreen().bounds.size
    let targetSize = CGSizeMake(screenSize.width, screenSize.height)

    var options = PHImageRequestOptions()
    options.resizeMode = PHImageRequestOptionsResizeMode.Exact
    options.synchronous = true

    if (asset.mediaType == PHAssetMediaType.Image) {
        PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: targetSize, contentMode: .AspectFill, options: options, resultHandler: {(result, info) in
            if (result.size.width > 200) {
                imageView = UIImageView(image: result)
            }
        })

        return imageView
    } else if (asset.mediaType == PHAssetMediaType.Video) {
        self.currentlyPlaying = Player()


        PHImageManager.defaultManager().requestAVAssetForVideo(asset, options: nil, resultHandler: {result, audio, info in
            self.currentlyPlaying.delegate = self
            self.currentlyPlaying.playbackLoops = true
            self.addChildViewController(self.currentlyPlaying)
            self.currentlyPlaying.didMoveToParentViewController(self)

            var t = result as AVURLAsset
            var url = t.valueForKey("URL") as NSURL
            var urlString = url.absoluteString

            self.currentlyPlaying.path = urlString
        })

        return self.currentlyPlaying.view
    }
    return UIView()
}


    func swipeViewItemSize(swipeView: SwipeView!) -> CGSize {
    return self.swipeView.bounds.size;
}

func swipeView(swipeView: SwipeView!, didSelectItemAtIndex index: Int) {
    self.currentlyPlaying.playFromBeginning()
}

func swipeViewCurrentItemIndexDidChange(swipeView: SwipeView!) {
    self.currentlyPlaying.stop()
}

任何想法都会很棒。

最佳答案

我遇到了同样的“到assetd的连接被中断或assetd死亡”错误。

通常后跟一个内存警告
我试图找到保留周期,但不是。

我的问题与已知事实有关,即任何PHImageManager request...()的resultHandler块是而不是在主队列上调用的

因此,我们不能直接在这些块中运行UIView代码,而不会在以后的应用程序中提出麻烦。

为了解决这个问题,我们可以例如运行在dispatch_async(dispatch_get_main_queue(), block)内的resultHandler块范围内执行的所有UIView代码

我遇到这个问题是因为我没有意识到我在应用程序的resultHandler.s中调用的其中一个函数最终确实调用了某些UIView代码。
因此,我没有将该调用转发给主线程。

希望这可以帮助。

关于ios - 照片框架: Connection to assetsd was interrupted or assetsd died,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27914846/

10-15 07:25