2015-02-24 3 views
5

Ich habe einen seltsamen Fehler in meinem eigenen Programm. Ich arbeite gerade an der Videobearbeitungs-App. Ich habe einen SongPicker-View-Controller, der alle Songs aus der Musik-App des Benutzers anzeigt. Wenn der Benutzer ein Lied auswählt, wird ein neues Objekt (MediaAsset) erzeugt, das dieses Lied darstellt. Es funktionierte perfekt, als SongPicker in Swift und MediaAsset in Objective-C geschrieben wurde. Allerdings habe ich MediaAsset komplett auf Swift umgeschrieben und jetzt jedes Mal, wenn ich versuche, ein neues MediaAsset von SongPicker zu erstellen, wirft Xcode EXC_BREAKPOINT (code = 1, subcode = ...) und meine App bricht ab.Xcode EXC_BREAKPOINT (Code = 1, Subcode = ...) beim Drucken von URL

Hier ist der Code, dass aufgerufen wird, wenn User-Song auswählt:

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)) 
} 

Es auf der Konsole tatsächlich erzeugt: zu MediaAsset Konstruktor

didSelectRowAtIndexPath 
item: <MPConcreteMediaItem: 0x174648340> 2369259457983598523, url: Optional("ipod-library://item/item.mp3?id=2369259457983598523") 

dann geht es weiter, die wie folgt aussieht:

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 
} 

druckt es auf Konsole:

new MediaAsset with url Optional("ipod-library://item/item.mp3?id=2369259457983598523") 

Und auf dieser Linie zerquetscht es: Crush screenshot

Der Code, der Vermögenswert von AVURLAsset schafft genau das gleiche ist, wie es in meiner alten ObjectiveC Klasse war (wo es sehr gut gearbeitet hat), so dass das Problem shouldn gehören nicht zu AVFoundation. Weiß jemand, was der Grund für diesen Schwarm sein kann? ? Und wie allgemeinere Frage, in welchen Fällen "EXC_BREAKPOINT (code = 1, ..." entsteht

EDIT Nach dieser println Anweisung löschen, meine App noch zerdrückt, aber jetzt zeigt diesen Assembler-Code: Crush

+0

Haben Sie Ausnahme-Breakpoints aktiviert? Wenn Sie sie deaktivieren, besteht das Problem weiterhin? –

+0

Ich habe Ausnahme-Breakpoints deaktiviert –

+0

Welche Breakpoints haben Sie aktiviert? –

Antwort

6

Ich fand eine Antwort. Fehler war in self.asset.videoTrack!.nominalFrameRate, weil im Falle eines audio asset.videoTrack wird Null, deshalb App stürzt ab. Ich weiß nur nicht, warum es sich so seltsam verhält und zeigt einen Fehler bei println() an. Muss einer von Tonnen Xcode swift Bugs sein

0

Du bist in einem NSURL? statt ein NSURL vorbei.

Sie müssen unter Umständen auch in filteredMediaItemsassetURL abhängig von der Art des Objekts auszupacken (assetURL kann optional sein).

+0

Danke für die Antwort, Aaron! Eigentlich hat item.assetURL den Typ NSURL !, und entpacke es explizit mit MediaAsset (url: item.assetURL !, type:.Audio) löst das Problem nicht –

+0

Und Element selbst ist nicht optional (es hat MPMediaItem Typ) und das Einfügen Ihres Codes gibt einen Fehler "gebundener Wert in bedingter Bindung muss optionalen Typs sein". –

+0

Sorry, ich wurde von "Optional" im Protokoll abgeworfen, aber das ist von 'absoluteString()'. –

9

Diese Ausnahme passiert, wenn der Wert von der '!' Ausgepackt wird Operator ist null. Fix den Nullwert und der Code sollte funktionieren.

+1

Kann der Downvoter bitte erklären, warum der Downvote? –

1

Ich konfrontiert das gleiche Problem, versuchte ich Shift + Cmd + K, um das Projekt zu reinigen und es das Problem behoben, obwohl ich nicht weiß, warum das passiert ist!

Verwandte Themen