2017-01-06 3 views
1

Swift 2からSwift 3に変換されたTVOSアプリがあり、次のエラーが発生しています。私はそれを沈黙させる方法が不明です。Swift 3 '[UIApplicationLaunchOptionsKey:Any]?' '[String:NSString]'に変換できません

'[UIApplicationLaunchOptionsKey:Any]?'

、コードのこの部分中に表示されて

appControllerContext.launchOptions["BASEURL"] = AppDelegate.TVBaseURL 

     if let launchOptions = launchOptions as? [String: AnyObject] { 
      for (kind, value) in launchOptions { 
       appControllerContext.launchOptions[kind] = value 
      } 
     } 

enter image description here

追加しました: '[NSStringの文字列]':に変換ない

/* 
 
Copyright (C) 2015 Hani Hamrouni. All Rights Reserved. 
 

 

 
*/ 
 

 
import UIKit 
 
import TVMLKit 
 

 
@UIApplicationMain 
 
class AppDelegate: UIResponder, UIApplicationDelegate, TVApplicationControllerDelegate { 
 
    // MARK: Properties 
 
    
 
    var window: UIWindow? 
 
    
 
    var appController: TVApplicationController? 
 
    
 
    //change the link to your host url 
 
    
 
    static let TVBaseURL = "http://google.com" 
 
    
 
    static let TVBootURL = "\(AppDelegate.TVBaseURL)js/application.js" 
 

 
    // MARK: UIApplication Overrides 
 
    
 
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
 
     // Override point for customization after application launch. 
 
     window = UIWindow(frame: UIScreen.main.bounds) 
 
     
 
     /* 
 
      Create the TVApplicationControllerContext for this application 
 
      and set the properties that will be passed to the `App.onLaunch` function 
 
      in JavaScript. 
 
     */ 
 
     let appControllerContext = TVApplicationControllerContext() 
 
     
 
     /* 
 
      The JavaScript URL is used to create the JavaScript context for your 
 
      TVMLKit application. Although it is possible to separate your JavaScript 
 
      into separate files, to help reduce the launch time of your application 
 
      we recommend creating minified and compressed version of this resource. 
 
      This will allow for the resource to be retrieved and UI presented to 
 
      the user quickly. 
 
     */ 
 
     if let javaScriptURL = URL(string: AppDelegate.TVBootURL) { 
 
      appControllerContext.javaScriptApplicationURL = javaScriptURL 
 
     } 
 
     
 
     appControllerContext.launchOptions["BASEURL"] = AppDelegate.TVBaseURL 
 
     
 
     if let launchOptions = launchOptions { 
 
      for (kind, value) in launchOptions { 
 
       appControllerContext.launchOptions[kind.rawValue] = value as AnyObject 
 
      } 
 
     } 
 
     
 

 
     appController = TVApplicationController(context: appControllerContext, window: window, delegate: self) 
 
     
 
     return true 
 
    } 
 
    
 
    // MARK: TVApplicationControllerDelegate 
 
    
 
    func appController(_ appController: TVApplicationController, didFinishLaunching options: [String: Any]?) { 
 
     print("\(#function) invoked with options: \(options)") 
 
    } 
 
    
 
    func appController(_ appController: TVApplicationController, didFail error: Error) { 
 
     print("\(#function) invoked with error: \(error)") 
 
     
 
     let title = "Error Launching Application" 
 
     //error message 
 
     let message = error.localizedDescription 
 
     let alertController = UIAlertController(title: title, message: message, preferredStyle:.alert) 
 
     
 
     self.appController?.navigationController.present(alertController, animated: true, completion: {() -> Void in 
 
      // ... 
 
     }) 
 
    } 
 
    
 
    func appController(_ appController: TVApplicationController, didStop options: [String: Any]?) { 
 
     print("\(#function) invoked with options: \(options)") 
 
    } 
 
}

+0

'[String:AnyObject]'を '[NSObject:AnyObject]'に変更しようとしましたか? –

+0

はい、私は、エラーを沈黙させません。 –

答えて

2

[UIApplicationLaunchOptionsKey : Any]をそのまま使用してください。

どうしてですか?

を更新し

if let launchOptions = launchOptions { 
     for (kind, value) in launchOptions { 
      appControllerContext.launchOptions[kind.rawValue] = value 
     } 
    } 

あなたはas AnyObjectにキャストする必要がないので、TVApplicationControllerContextの財産launchOptionsのタイプは、[String: Any]あるようです。

+0

返信いただきありがとうございます。私は私の質問には、アプリケーションデリゲートファイルのすべての内容を追加しました。 –

+0

@JasonP。あなたの質問を更新してくれてありがとう、ありがとう、TVMLアプリについての私の無知のために。私は答えを更新しますが、最新のXcodeで作成されたTVMLアプリのテンプレートプロジェクトで同じコードを見つけることができます。 – OOPer

+0

ありがとう、私はあなたの答えを受け入れました。 –

0

このコードを試してくださいpleas eと何が起こるか教えてください。

appControllerContext.launchOptions["BASEURL"] = AppDelegate.TVBaseURL 

     if let launchOptions = launchOptions as? [String: Any] { 
      for (kind, value) in launchOptions { 
       appControllerContext.launchOptions[kind] = value 
      } 
     } 
+0

返信いただきありがとうございますが、これでエラーは消えません。 –

関連する問題