Nik*_*pov 10 memory xcode ios swift
我自己的程序中有一个奇怪的错误.我目前正在开发视频编辑应用.我有一个SongPicker视图控制器,它显示用户音乐应用程序中的所有歌曲.当用户选择歌曲时,创建表示该歌曲的新对象(MediaAsset).当SongPicker用Swift编写,MediaAsset用Objective-C编写时,它工作得很好.但是我在Swift上完全重写了MediaAsset,现在每当我尝试从SongPicker创建新的MediaAsset时,Xcode抛出EXC_BREAKPOINT(代码= 1,子代码= ...)并且我的应用程序崩溃了.
以下是用户选择歌曲时调用的代码:
private let mediaItems = MPMediaQuery.songsQuery().items as [MPMediaItem]
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){
   let item = filteredMediaItems[indexPath.row]
   println("didSelectRowAtIndexPath")
   println("item: \(item), url: \(item.assetURL.absoluteString)")
   delegate?.songPickerViewController(self, didPickedAsset: MediaAsset(url: item.assetURL, type: .Audio))
}
它实际上生成输出到控制台:
didSelectRowAtIndexPath
item: <MPConcreteMediaItem: 0x174648340> 2369259457983598523, url: Optional("ipod-library://item/item.mp3?id=2369259457983598523")
然后它转到MediaAsset构造函数,看起来像这样:
init(url: NSURL, type: MediaAssetType){
  println("new MediaAsset with url \(url.absoluteString)")
  self.url = url
  self.asset = AVURLAsset(URL: url, options: [AVURLAssetPreferPreciseDurationAndTimingKey: true])
  self.timeRange = CMTimeRangeMake(kCMTimeZero, self.asset.duration)
  self.initialRate = CGFloat(max(self.asset.videoTrack!.nominalFrameRate / 30.0, 1.0))
  self.rate = self.initialRate
  self.type = type
}
它打印到控制台:
new MediaAsset with url Optional("ipod-library://item/item.mp3?id=2369259457983598523")
在这一行上,它粉碎了:

从AVURLAsset创建资产的代码与我在旧的ObjectiveC类中完全相同(它工作得非常好),因此问题不应该属于AVFoundation.有谁知道这种迷恋的原因是什么?而作为更一般的问题,在哪种情况下"EXC_BREAKPOINT(代码= 1,......)出现?
编辑 
删除此println语句后,我的应用程序仍然崩溃,但现在显示此汇编程序代码:
K.K*_*K.K 12
当值被"!"打开时会发生此异常 运营商是零.修复nil值,代码应该可以工作.
如果您在异步块内同步地在主队列上分派某些内容,也可能会导致此错误,这恰好也在主队列上运行:
dispatch_async(dispatch_get_main_queue(), ^{    // This might happen unintentionally.
  dispatch_sync(dispatch_get_main_queue(), ^{
    // Do stuff.
  });
});
在这种情况下,您的代码将陷入死锁,因为异步块在同步块完成之前不会完成,并且在异步块完成之前它不会启动。
我找到了答案.错误是self.asset.videoTrack!.nominalFrameRate,因为如果一个audio asset.videoTrack将是零,这就是应用程序崩溃的原因.只是不知道它为什么表现得如此奇怪,指出一个错误println().必须是大量Xcode的swift相关错误之一
| 归档时间: | 
 | 
| 查看次数: | 25039 次 | 
| 最近记录: |