2016-07-09 9 views
0

ich dieses Projekt von GitHub bin mit zum Spielen 360 Videos: https://github.com/Aralekk/simple360player_iOSWiedergabe von Video von URL basierend auf dem nächsten Bake

Und ich will von URL spezifisches Video spielen, basierend auf welchen Baken am nächsten liegt. Ich habe es diese Eigenschaften:

var minorOfClosestBeacon = Int() 
var playVideo = String() 
let urls = [ 
    40018: "url1", 
    38474: "url2", 
    60220: "url3" 
] 

Und meine didRangeBeacons Funktion sieht wie folgt aus:

func beaconManager(manager: KTKBeaconManager, didRangeBeacons beacons: [CLBeacon], inRegion region: KTKBeaconRegion) { 
    print("Did ranged \"\(beacons.count)\" beacons inside region: \(region)") 
    if beacons.count == 0 { 
     userInfoView.hidden = false 
    } 
    if let closestBeacon = beacons.sort({ $0.0.accuracy < $0.1.accuracy }).first where closestBeacon.accuracy > 0 { 
     print("Closest Beacon is M: \(closestBeacon.major), m: \(closestBeacon.minor) ~ \(closestBeacon.accuracy) meters away.") 
     minorOfClosestBeacon = closestBeacon.minor.integerValue 
     let videoToPlay = self.urls[minorOfClosestBeacon]! 
     if playVideo != videoToPlay { 
      playVideo = videoToPlay 
      play(playVideo) 
      print("Playing video: \(playVideo)") 
      userInfoView.hidden = true 
     } else { 
      userInfoView.hidden = true 
     } 
    } 
} 

Wenn ich drucke es playvideo, druckt es mir richtigen Wert, ist aber nicht Video zu spielen. Wenn das erste Beacon das erste in urls-Array ist, wird es gerade nicht wiedergegeben, aber wenn es das zweite oder dritte Beacon ist, gibt es den richtigen Wert für die URL aus, aber nach diesem fatalen Fehler: unerwartet failed beim Entpacken eines optionalen Werts . Was soll da falsch sein?

+0

Die einzige Anweisung nach dem Drucken der UTL ist diejenige, die 'userInfoView.hidden = true' setzt. Wo und wie ist 'userInfoView' definiert? Versuchen Sie, diese Zeilen zu kommentieren, um zu sehen, ob das den schwerwiegenden Fehler behebt. –

+0

Welche Werte erhalten Sie für 'minorOfClosestBeacon'? Versuchen Sie, die if-Bedingung "if playVideo! = VideoToPlay" zu entfernen, um zu sehen, ob das erste Video abgespielt wird. –

Antwort

0

Ich vermute, dass die fatal error: unexpectedly found nil while unwrapping an Optional value. durch den Knall in dieser Linie verursacht wird:

let videoToPlay = self.urls[minorOfClosestBeacon]! 

Ich würde ersetzen, dass mit:

if let videoToPlay = self.urls[minorOfClosestBeacon] { 
    // Put the rest of your code here 
    ... 
} 
else { 
    print "No video found for minor \(minorOfClosestBeacon)" 
} 

Es ist schwer zu sagen, warum das Video nicht spielen würde, ohne den Inhalt der play Methode zu sehen. Vielleicht müssen Sie es auf dem Haupt-Thread laufen mit:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 
    play(playVideo) 
} 

ich mit einem hartcodierte URL, die play Methodenaufruf Werke von selbst überprüfen würde, bevor man mit dem ganzen Leuchtfeuer Logik zu arbeiten.

+0

Es druckt mich jetzt Kein Video zu spielen für Moll ... So gibt es mir das sonst –

+0

Ok, welche Nebenzahl druckt es mit dem else? Hast du ein Video für diese Nummer konfiguriert? – davidgyoung

+0

Okay, jetzt druckt es mir das richtige PlayVideo, aber wenn das erste Beacon das nächste ist, wird es einfach nichts spielen. Aber wenn das zweite oder dritte das nächste ist, dann gibt es einen fatalen Fehler, wenn ich auf die Play-Taste tippe: unerwartet wurde nil beim Entpacken eines optionalen Wertes gefunden. –