'ErrorType' не конвертируется в 'NSError'

У меня есть ошибка с Google Analytics:

'ErrorType' не конвертируется в 'NSError'; вы хотели использовать «как!» заставить downcast?

Это происходит, когда я пытаюсь вызвать 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!' to [[NSObject: AnyObject] "всегда преуспевает; вы хотели использовать «как»?

А ТАКЖЕ

Переменный «строитель» никогда не мутировался; рассмотрим переход на «пусть» постоянный

2 Solutions collect form web for “'ErrorType' не конвертируется в 'NSError'”

Для меня это также происходит при использовании AVFoundation и Core Data в том же проекте.

Чтобы избавиться от ошибки:

'ErrorType' не конвертируется в 'NSError'; вы хотели использовать «как!» заставить downcast?

Или предупреждения:

Условный отбор из «ErrorType» в «NSError» всегда преуспевает

Принудительное применение от «ErrorType» до «NSError» всегда выполняется успешно; вы хотели использовать «как»?

Я сделал это:

 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 }() 

Надеюсь это поможет 🙂

Сообщение об ошибке сообщает об этой проблеме и предлагает решение. Постоянная error в блоке catch имеет тип ErrorType , и вы хотите 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 оператор. И третья проблема заключается в том, что вы объявляете переменную ( var ), значение которой вы никогда не изменяете. В этих случаях использование константы ( let ) является предпочтительным.

 let builder = GAIDictionaryBuilder.createScreenView().build() as [NSObject : AnyObject] 
  • Перейти к другому виду программно в Swift 3
  • ~ = оператор в Свифте
  • uitextfield в быстрой 3 не сэкономить
  • Проблема с "func observValueForKeyPath (keyPath: NSString, object: AnyObject, change: NSDictionary, context: Void)" в Swift
  • Как подклассифицировать переменную с помощью IBOutlet?
  • Как конвертировать CGPoint в NSValue в swift?
  • Swift UI Testing Строка доступа в TextField
  • Firebase Facebook зарегистрируйтесь, если пользователь существует
  • Пытаться получить доступ к неопубликованной ссылке в Swift всегда приводит к сбою приложения
  • Создайте изображение содержимого SKScene, которое не отображается
  • Автоматическое вращение iOS 8.1
  • Interesting Posts

    NSCalendar dateFromComponents: часовой пояс GMT вместо systemTimeZone

    Интеграция Google Analytics в SWIFT

    Воспроизведение видео в facebook в приложении ios

    ReplayKit не работает в коде проекта iOS SpriteKit

    Проблема с разделителем UITableView

    AVCam не в полноэкранном режиме

    Возможно ли при покупке приложения в ios использовать подписку на конкретную учетную запись?

    Друзья онлайн присутствия – Facebook SDK 3

    Swift 2: Тип выражения неоднозначен без дополнительного контекста

    Выполнять тесты GUI iOS monotouch автоматически из командной строки

    Использование AWS Mobile Hub для получения рабочего знака в

    Перемещение UILabels в (X, Y) положение программно?

    Не все NSUserDefaults восстанавливаются при перезагрузке приложения

    Внедрение пользовательской анимации для представления модального представления из указанного вида на iPad

    Исходное начало кнопки UINavigation в iOS 7

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.