我在自己的程序中有一個奇怪的錯誤。我目前正在研究視頻編輯應用程序。我有一個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