Недавно я начал разрабатывать приложение 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)
}
Спасибо за ваш комментарий, но тот не :( –
Вы изменили этот вопрос сейчас, так что мой ответ не имеет никакого отношения к тому, как теперь звучит вопрос. – neil
Я изменил вопрос после вашего ответа. –