我在自己的程序中有一个奇怪的错误。我目前正在研究视频编辑应用程序。我有一个SongPicker视图控制器,它显示用户音乐应用程序中的所有歌曲。当用户选择歌曲时,创建代表该歌曲的新对象(MediaAsset)。当SongPicker用Swift编写时,它和Objective-C中的MediaAsset完全一样。不过,我在Swift上完全重写了MediaAsset,现在每次我试图从SongPicker创建新的MediaAsset时,Xcode都会抛出EXC_BREAKPOINT(code = 1,subcode = ...),并且我的应用程序崩溃。打印url时Xcode EXC_BREAKPOINT(code = 1,subcode = ...)
下面是代码,当用户选择的歌曲被称为:
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语句,之后,我的应用程序仍然粉碎,但现在显示了这个汇编代码:
您是否打开异常断点?如果您关闭它们,问题是否仍然存在? – 2015-02-24 17:56:18
我有异常断点关闭 – 2015-02-24 19:11:26
您启用了哪些断点? – 2015-02-24 19:20:30