“ErrorType”不能转换为“NSError”
我在Google Analytics中遇到了一个错误:
“ErrorType”不能转换为“NSError”; 你的意思是使用“as!” 强迫低调?
它发生在我试图调用2次createScreenView时
我这样做:
override func viewDidLoad() { let tracker = GAI.sharedInstance().defaultTracker tracker.set(kGAIScreenName, value: "Demande Gratuite") var builder = GAIDictionaryBuilder.createScreenView().build() as! [NSObject : AnyObject] tracker.send(builder) ... } @IBAction func Valider(sender: AnyObject) { ... let trackerv = GAI.sharedInstance().defaultTracker trackerv.set(kGAIScreenName, value: "Demande Envoyé") var builder = GAIDictionaryBuilder.createScreenView().build() as! [NSObject : AnyObject] trackerv.send(builder) let eventTracker: NSObject = GAIDictionaryBuilder.createItemWithTransactionId( "1", name: "test", sku: nil, category: "IOS", price: 1, quantity: 1, currencyCode: nil).build() trackerv.send(eventTracker as! [NSObject : AnyObject]) }
函数的错误是:
lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = { // The persistent store coordinator for the application. This implementation creates and returns a coordinator, having added the store for the application to it. This property is optional since there are legitimate error conditions that could cause the creation of the store to fail. // Create the coordinator and store let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel) let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("SingleViewCoreData.sqlite") var failureReason = "There was an error creating or loading the application's saved data." do { try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil) } catch { // Report any error we got. var dict = [String: AnyObject]() dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data" dict[NSLocalizedFailureReasonErrorKey] = failureReason dict[NSUnderlyingErrorKey] = error as NSError let wrappedError = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict) // Replace this with code to handle the error appropriately. // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. NSLog("Unresolved error \(wrappedError), \(wrappedError.userInfo)") abort() } return coordinator }()
这里的另一个问题
let tracker = GAI.sharedInstance().defaultTracker tracker.set(kGAIScreenName, value: "Mentions Légales") var builder = GAIDictionaryBuilder.createScreenView().build() as! [NSObject : AnyObject] tracker.send(builder)
从“NSMutableDictionary!”强制转换 到'[NSObject:AnyObject]'总是成功; 你的意思是用“as”?
和
variables“build造者”从来没有变异; 考虑改变为“让”不变
对我来说,在同一个项目中使用AVFoundation和Core Data也会发生这种情况。
为了摆脱这个错误:
“ErrorType”不能转换为“NSError”; 你的意思是使用“as!” 强迫低调?
或者警告:
从“ErrorType”到“NSError”的条件转换总是成功的
从“ErrorType”强制转换为“NSError”总是成功; 你的意思是用“as”?
我做到了这一点:
lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = { // The persistent store coordinator for the application. This implementation creates and returns a coordinator, having added the store for the application to it. This property is optional since there are legitimate error conditions that could cause the creation of the store to fail. // Create the coordinator and store let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel) let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("MY_APP_NAME.sqlite") var failureReason = "There was an error creating or loading the application's saved data." do { try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil) } catch let error as NSError { // Report any error we got. var dict = [String: AnyObject]() dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data" dict[NSLocalizedFailureReasonErrorKey] = failureReason dict[NSUnderlyingErrorKey] = error let wrappedError = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict) // Replace this with code to handle the error appropriately. // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. NSLog("Unresolved error \(wrappedError), \(wrappedError.userInfo)") abort() } catch { // dummy } return coordinator }()
希望这可以帮助 :)
错误消息告诉你这个问题,并build议一个解决scheme。 catch块中的常量error
的types是ErrorType
,并且你想把它转换成NSError
,这个转换可能不会成功。 因此,你不能使用只有编译器能够告诉的转换才能成功的常规运算符。 相反,你要么使用as!
强制转换还是as?
做一个安全的演员。
catch { // Report any error we got. var dict = [String: AnyObject]() dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data" dict[NSLocalizedFailureReasonErrorKey] = failureReason if let underlyingError = error as? NSError { dict[NSUnderlyingErrorKey] = underlyingError } let wrappedError = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict) // Replace this with code to handle the error appropriately. // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. NSLog("Unresolved error \(wrappedError), \(wrappedError.userInfo)") abort() }
对于你的第二个问题,你有相反的问题。 你正在使用的as!
编译器知道的转换操作符将始终工作。 你应该只使用plain as
运算符。 第三个问题是你正在声明一个variables( var
),它的值永远不会改变。 在这些情况下,使用常数( let
)是首选。
let builder = GAIDictionaryBuilder.createScreenView().build() as [NSObject : AnyObject]
- Google Analytics库IOS
- Google Analytics Pod会安装太多的依赖项
- Google Analytics iOS SDK [GAIReachabilityChecker reachabilityFlagsChanged:crash
- 在iOS中快速实施Google Analytics
- 将Google AnalyticsSDK(GoogleAnalyticsiOS_2.0beta4)集成到我的iOS应用中时出错
- 谷歌分析电子商务价值并没有在谷歌分析控制台更新
- 应用因“不正确的IDFA”而被拒绝,而我没有使用任何广告服务
- 在iPhone应用程序上监控Google Analytics请求
- 在iOS应用上安装Google Analytics(分析)时出错