2015-09-29 10 views
1

я просто обновить до Xcode 7 и там я встретил эту проблему в моем AppDelegate.swiftне может ссылаться на инициализатор для типа «NSError» с (домен, код, USERINFO) в AppDelegate CoreData, Swift 2

lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator? = { 
    // The persistent store coordinator for the application. This implementation creates and return 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 
    var coordinator: NSPersistentStoreCoordinator? = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel) 
    let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("Inclinometer.sqlite") 
    var error: NSError? = nil 
    var failureReason = "There was an error creating or loading the application's saved data." 


    let mOptions = [NSMigratePersistentStoresAutomaticallyOption: true, 
     NSInferMappingModelAutomaticallyOption: true] 
    do { 
     try coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: mOptions) 
    } catch var error1 as NSError { 
     error = error1 

     // Report any error we got. 
     let dict = NSMutableDictionary() 
     dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data" 
     dict[NSLocalizedFailureReasonErrorKey] = failureReason 
     dict[NSUnderlyingErrorKey] = error 
     error = 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 \(error), \(error!.userInfo)") 
     abort() 
    } catch { 
     fatalError() 
    } 

    return coordinator 
}() 

Он показывает, в этой строке

error = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict) 

, что не может ссылаться на инициализатор для типа «NSError» со списком аргументов типа (домен, код, USERINFO). Как его изменить, чтобы запустить его в Xcode 7?

ответ

0

Инициализатор NSError ожидает аргумент типа [String: AnyObject] для userInfo. Вы должны написать это:

let dict : [String: AnyObject] = [ 
    NSLocalizedDescriptionKey: "Failed to initialize the application's saved data", 
    NSLocalizedFailureReasonErrorKey : failureReason 
    NSUnderlyingErrorKey : error 
] 

Кроме того, я думаю, что у вас нет необходимости создавать дополнительную переменную ошибки (определяется где?) И перезаписать его.

+2

Привет, Он показал «Тип выражения неоднозначное без больше контекста» теперь именно этим «дайте диктову». Вы имеете в виду, что мне не нужно определять «error = NSError (домен:« YOUR_ERROR_DOMAIN », код: 9999, userInfo: dict)»? – Mushroomcloud

+0

Кроме того, я думаю, что он ожидает не только строки. См. «NSError (домен: , код: , userInfo: <[NSObject: AnyObject]?>))« – Mushroomcloud

+0

Работает для меня с использованием Xcode 7.1. – Mundi

-1

Похоже, вы должны быть очень конкретным с тем, что вы кладете в словарь, в XCode 7.0 это работает для меня

let dict : [String: AnyObject] = [ 
     NSLocalizedDescriptionKey: "Failed to initialize the application’s saved data", 
     NSLocalizedFailureReasonErrorKey: String(failureReason), 
     NSUnderlyingErrorKey: String(error), 
    ] 
error = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)