2014-12-11 2 views
0

Недавно я начал разрабатывать приложение Chromecast с новым языком Apple Swift. Но я застрял при подключении к устройству Chromecast. Что он делает до сих пор, что он может видеть Chromecast в сети. После этого появится AlertController (AlertController - это то же самое, что и ActionSheet). Причина, почему я использую AlertController, заключается в том, что ActionSheet устарел Apple. Сначала я подумал, что это будет ActionSheet, что делает его неработоспособным. После этого я попробовал, выделяют другой версии ActionController/ActionSheet, но не везло до сих пор .. В качестве основы для создания этого в Swift я использовал Google Cast Пример приложения, что в Objective C. https://github.com/googlecast/CastHelloText-iosПодключение/отключение от устройства Chromecast с быстрым

- - UPDATE -

После всплывающего окна Alertcontroller я щелкаю устройство, которое затем подключается и успешно завершается. Когда я пытаюсь отключиться, он дает мне ошибку исключения «неожиданно нашел нуль при развертывании необязательного значения». Я получаю эту ошибку в этой строке кода.

self.mediaInformation.metadata.stringForKey(kGCKMetadataKeyTitle) 

Так в основном это говорит о mediaInformation = ноль,

self.mediaInformation.metadata.stringForKey(kGCKMetadataKeyTitle!) 

так что я думал, что позволяет сделать его необязательным, но это не сработало. Кто-нибудь знает, почему он не работает?

func chooseDevice() { 
    if selectedDevice == nil { 
     let alertController = UIAlertController(title: "Choose an device..", message: "Click on your chromecast!", preferredStyle: .ActionSheet) 

     for device in deviceScanner.devices { 
      alertController.addAction(UIAlertAction(title: device.friendlyName, style: .Default, handler: { alertAction in 
       self.selectedDevice = device as GCKDevice 
       self.connectToDevice() 
      })) 
     } 

     let addCancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: { alertAction in 
      alertController.dismissViewControllerAnimated(true, completion: nil) 
     }) 

     // Add action to the controller 
     alertController.addAction(addCancelAction) 

     // Finaly present the action controller 
     presentViewController(alertController, animated: true, completion: nil) 
    } 
    else { 
     updateButtonStates() 

     var mediaTitle = GCKMediaInformation() 
     mediaTitle.metadata.stringForKey(self.textFieldUrl.text) 

     let alertController = UIAlertController(title: "Casting to: \(selectedDevice.friendlyName)", message: nil, preferredStyle: .ActionSheet) 

     let addDisconnectingAction = UIAlertAction(title: "Disconnect device", style: .Destructive, handler: { alertAction in 
      println("De waarde van mediaInformation is: \(self.mediaInformation)") 
      if self.mediaInformation != nil { 
       (self.mediaInformation != nil ? 1 : 0) 
       alertController.dismissViewControllerAnimated(true, completion: nil) 
       println("the else UIAlertController") 
      } 
     }) 

     let addCancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: { alertAction in 
      println("De waarde van mediaInformation is: \(self.mediaInformation)") 
      if self.mediaInformation != nil { 
       (self.mediaInformation != nil ? 2 : 1) 
       alertController.dismissViewControllerAnimated(true, completion: nil) 
       println("else uiactionsheet") 
      } 
     }) 

     alertController.addAction(addDisconnectingAction) 
     alertController.addAction(addCancelAction) 

     self.presentViewController(alertController, animated: true, completion: nil) 
    } 
} 

Вот как я устанавливаю связь с Chromecast. Это может быть что-то неправильно в connectToDevice() или в deviceManagerDidConnect()? Weard Дело в том, что я никогда не получаю сообщение «Connected» в deviceManagerDidConnect()

func connectToDevice() { 
    if selectedDevice != nil { 
     var info = NSBundle.mainBundle().infoDictionary?["CFBundleVersion"] as? String 
     deviceManager = GCKDeviceManager(device: selectedDevice, clientPackageName: info) 

     NSLog("De waarde van info: \(info)") 
     NSLog("De waarde van deviceManager in connectToDevice() is: \(deviceManager)") 

     deviceManager = GCKDeviceManager(device: deviceScanner.devices[0] as GCKDevice, clientPackageName: info) 
     deviceManager.delegate = self 
     deviceManager.connect() 
    } 
} 

    func deviceManagerDidConnect(deviceManager: GCKDeviceManager!) { 
     NSLog("Connected!") 

     updateButtonStates() 

     deviceManager.launchApplication(kReceiverAppID) 
} 

ответ

0

Я думаю, что вам нужно сделать что-то в обработчике для UIAlertAction установить self.selectedDevice

например

for selectedDevice in self.deviceScanner.devices { 
     alertController.addAction(UIAlertAction(title: selectedDevice.friendlyName, style: .Default, handler: { action in 
      self.selectedDevice = device 
      self.connectToDevice() 
     })) 
    } 
+0

Спасибо за ваш комментарий, но тот не :( –

+0

Вы изменили этот вопрос сейчас, так что мой ответ не имеет никакого отношения к тому, как теперь звучит вопрос. – neil

+0

Я изменил вопрос после вашего ответа. –

0

Название материала будет ничтожным, если вы не литье каких-либо носителей, поэтому используйте его таким образом:
Объявление:

var mediaInformation : GCKMediaInformation? 

Использование:

let mediaTitle = self.mediaInformation?.metadata.stringForKey(kGCKMetadataKeyTitle) 
+0

Благодарим вас за ответ. Но его все еще нет, поэтому я не могу отключиться от подключенного устройства Chromecast. –

+0

Значит, вы все еще получаете ошибку и приложение рушится? Потому что теперь даже если его ноль не будет бросать никаких ошибок, потому что это необязательно – Aks

+0

Спасибо за ваш комментарий. Нет. Это больше не грозит. Я имел в виду, что код продолжается, а затем вызывается «UIAlertController», и когда я нажимаю кнопку устройства в UIAlertController, ничего не происходит. Он не отключается. Он остается связанным каким-то странным образом. Может быть, это потому, что MediaTitle все еще ноль?Или подключенное устройство неправильно подключено? Честно говоря, я не знаю, где искать больше. Я потерян :( –

Смежные вопросы