'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] 
  • Эффект вибрации на UIButton в интерфейсе Builder
  • invalidateLayout с invalidateSupplementaryElements и UICollectionViewLayoutInvalidationContext
  • Может ли SwiftyJson преобразовывать пользовательский класс swift в строку json?
  • Неоднозначное использование init в Swift 2.2
  • UIStackView пропорциональная компоновка только с внутренним контуром
  • EXC_BAD_ACCESS Использование IBInspectable
  • Перенаправить печать в файл как перенаправление NSLog в файл
  • Изменить цвет фона uisearchcontroller
  • Swift 2.2 MVVM view Модель как измененная структура не поддерживает состояние в поле зрения контроллера
  • Как работать с строкой ввода пользователя, которая при ошибке вставки в Xcode дает ошибку «unprintable ascii character found in source file»?
  • Несоответствие типов «Int64» и «_» при попытке назначить дополнительный Int64 ключу словаря
  • Interesting Posts

    Добавление большего количества прототипов ячеек в раскадровку iOS, чем размерность viewcontroller?

    Как определить, откуда было распространено приложение iOS?

    iOS UI Тестирование при первом указателе таблицы

    iOS: Как создать видео-чат один или один на один

    Суперкласс для UITableViewController и UIViewController

    Сбой приложения iOS на устройстве через несколько дней

    Как определить, полностью ли покрыт CALayer другими CALayers?

    Преобразовать gregorian datepicker в persian datepicker в swift?

    Преобразование речи в текст в iOS

    Как загрузить локальный json-файл в Xcode для целей единого тестирования?

    как я могу получить cgcolor из значений RGB?

    Отображение iOS iOS только для поддерживаемых стран

    Производительность изображения по сравнению с пользовательским рисунком в UIKit

    Остановка прокрутки в UICollectionView

    Передача значений UIViewController в новой раскадровке – Swift

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