Ho uno strano bug nel mio programma. Attualmente sto lavorando all'app Video Editing. Ho un controller di visualizzazione SongPicker, che visualizza tutti i brani dall'app musicale dell'utente. Quando l'utente seleziona una canzone, viene creato un nuovo oggetto (MediaAsset) che rappresenta quella canzone. Ha funzionato perfettamente, quando SongPicker è stato scritto in Swift e MediaAsset in Objective-C. Tuttavia ho riscritto MediaAsset completamente su Swift e ora ogni volta che cerco di creare un nuovo MediaAsset da SongPicker, Xcode lancia EXC_BREAKPOINT (code = 1, subcode = ...) e la mia app si schiaccia.Xcode EXC_BREAKPOINT (codice = 1, sottocodice = ...) quando si stampa l'url
Ecco il codice, che viene chiamata quando l'utente seleziona canzone:
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))
}
E 'in realtà genera output in console:
didSelectRowAtIndexPath
item: <MPConcreteMediaItem: 0x174648340> 2369259457983598523, url: Optional("ipod-library://item/item.mp3?id=2369259457983598523")
poi va a MediaAsset costruttore, che assomiglia a questo:
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
}
esso stampa alla console:
012.351.641.061.new MediaAsset with url Optional("ipod-library://item/item.mp3?id=2369259457983598523")
E su questa linea si schiaccia:
Il codice che crea risorsa da AVURLAsset è esattamente lo stesso che era nella mia vecchia classe ObjectiveC (dove ha funzionato perfettamente bene), quindi il problema shouldn appartenere a AVFoundation. Qualcuno sa quale possa essere la ragione di quella cotta? ? E come questione più generale, in quali casi "EXC_BREAKPOINT (codice = 1, ..." si pone
EDIT Dopo l'eliminazione di questa dichiarazione println, la mia app schiaccia ancora, ma ora mostra questo codice assembler:
Sono stati attivati punti di interruzione delle eccezioni? Se li spegni, il problema persiste? –
I punti di interruzione eccezione sono disattivati –
Quali punti di interruzione sono stati abilitati? –