照片框架:与assetsd的连接被中断或资产死亡

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

会发生什么,我有一个观点,将显示一张照片或一个video。 一切正常工作,直到有几个video播放,然后这个消息将popup,其次是所有的video无法播放,在他们的地方,你只是看到一个黑屏,然后我得到一个内存使用错误。

我正在使用一个名为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() } 

任何想法都会很棒。

我有这样的“ 连接资产被中断或资产死亡 ”错误。

通常跟着一个记忆警告 。 我试图find保留周期,但事实并非如此。

对于我来说,问题与已知的事实有关,即任何PHImageManager request...()resultHandler块都不会在主队列上调用。

所以我们不能直接在这些块中运行UIView代码,而不会在应用程序生命中稍后再要求麻烦。

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

我有这个问题,因为我没有意识到,我的应用程序的resultHandler .s之一,我调用的函数之一,最终调用一些UIView代码。 所以我没有把这个调用转发给主线程。

希望这可以帮助。

您的问题可能是您每次开始播放video时都会创build一个新的Player对象:

  self.currentlyPlaying = Player() 

我build议您在文件播放结束后将其删除,或者创build一个可以重复使用的播放器。 否则,它会留在memory.v中