gpt4 book ai didi

ios - Swift 2.0 迁移错误

转载 作者:搜寻专家 更新时间:2023-10-31 08:12:42 25 4
gpt4 key购买 nike

我观看了 WWDC session ,阅读了关于 Swift 的新程序员书籍,并阅读了我能在 Stack Overflow 上找到的所有相关问题。从 Swift 1.2 迁移到 Swift 2.0 后,我修复了应用程序中的大部分错误。

但是还有一些我没能解决。

向下转换 AnyObject

错误:

Cannot downcast from '[AnyObject]' to a more optional type '[NSManagedObject]'

代码:

    let fetchRequest = NSFetchRequest(entityName: formulaEntity)

var error: NSError?

do {
let fetchedResults = try managedContext.executeFetchRequest(fetchRequest) as! [NSManagedObject]?

if let results = fetchedResults {
stocks = results
} else {
print("Could not fetch \(error), \(error!.userInfo)")
}
} catch {
print("ERROR: \(error)")
}

显示的错误发生在 let fetchedResults = try...

我遇到的另一个奇怪错误是在我的 AppDelegate 中:

错误:

'NSMutableDictionary' is not convertible to '[NSObject : AnyObject]'

代码:

    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("Stocks.sqlite")
var error: NSError? = nil
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 var error1 as NSError {
error = error1
coordinator = nil
// 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 as [NSObject : AnyObject])
// 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
}()

我没有接触过上面的代码。所以我不知道为什么没有通过 Apple 的迁移工具正确迁移。

我的 AppDelegate 中的另一个错误:

Binary operator '&&' cannot be applied to two Bool operands

Call can throw, but it is not marked with 'try' and the error is not handled.

代码:

func saveContext () {
if let moc = self.managedObjectContext {
var error: NSError? = nil
if moc.hasChanges && !moc.save() {
// Replace this implementation 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()
}
}
}

同样,我还没有触及 AppDelegate 的这一部分,也不确定上面的代码到底出了什么问题。

最佳答案

AppDelegate 上的 CoreData 似乎存在严重的 Swift 2 迁移问题。我能够通过将 AppDelegate CoreData Swift 1.2 完全替换为 Swift 2.0 来解决问题。

你需要做的是删除下面的

lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {

lazy var managedObjectContext: NSManagedObjectContext = {

// MARK: - Core Data Saving support

func saveContext ()

并粘贴 Swift 2.0 代码:

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

lazy var managedObjectContext: NSManagedObjectContext = {
// Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.) This property is optional since there are legitimate error conditions that could cause the creation of the context to fail.
let coordinator = self.persistentStoreCoordinator
var managedObjectContext = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType)
managedObjectContext.persistentStoreCoordinator = coordinator
return managedObjectContext
}()

// MARK: - Core Data Saving support

func saveContext () {
if managedObjectContext.hasChanges {
do {
try managedObjectContext.save()
} catch {
// Replace this implementation 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.
let nserror = error as NSError
NSLog("Unresolved error \(nserror), \(nserror.userInfo)")
abort()
}
}
}
}

这应该可以解决问题。

关于ios - Swift 2.0 迁移错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30823072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com