【发布时间】:2017-01-27 21:43:56
【问题描述】:
我已经查看了 Apple 的:
Xcode 8 发行说明:
https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Introduction.html
从 Swift 2.2 迁移到 Swift 2.3 或 Swift 3
https://swift.org/migration-guide/
macOS 10.12、iOS 10.0、tvOS 10.0 和 watchOS 3.0 中 Core Data 的新功能
https://developer.apple.com/library/content/releasenotes/General/WhatNewCoreData2016/ReleaseNotes.html#//apple_ref/doc/uid/TP40017342-CH1-DontLinkElementID_1
还有许多其他的……但应该从 Apple 获得的一份文档,即核心数据编程指南,尚未从 Swift 2 更新。
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/FetchingObjects.html#//apple_ref/doc/uid/TP40001075-CH6-SW1
理想情况下,我正在寻找类似的东西,但 Swift 3 除外。
https://www.raywenderlich.com/115695/getting-started-with-core-data-tutorial
任何线索将不胜感激。
根据 Tom 的评论(如下)我错过了哪一步?
1) 创建一个新项目“Test”
2) 选择使用 CoreDate(这会创建 Test.xcdatamodeld)
这将使用以下内容自动填充 AppDelegate(删除默认 cmets):
func applicationWillTerminate(_ application: UIApplication) {
self.saveContext()
}
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "Test")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
func saveContext () {
let context = persistentContainer.viewContext
if context.hasChanges {
do {
try context.save()
} catch {
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
}
}
3) 创建实体“Foo”
4) 添加属性“bar”类型字符串
5) 在 ViewController.swift 下添加以下内容(这是从 Apple 复制的,我只是将“...use”替换为“print”)
func findAnimals() {
let request: NSFetchRequest<Foo> = Foo.fetchRequest
do {
let searchResults = try context.fetch(request)
print(searchResults)
} catch {
print("Error with request: \(error)")
}
}
6) 在 override func viewDidLoad() 下添加 findAnimals()。
但是这有具体的错误:
- NSFetchRequest
- 上下文
7) 所以你返回并在 viewController 下的函数中添加一些 this 以使容器可访问(这不是 Apple 的示例表单)。
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
很好,我们清除了 2 个错误中的 1 个,但错误“使用未声明的类型 'NSFetchRequest'”仍然存在。
这就是我卡住的地方。即使查看了 Apple 发布的所有材料,我也找不到完整的示例。
【问题讨论】:
-
具体有什么不明白的?
-
有限的文档意味着只需在 xcdatamodeld 中创建一个实体,它将自动被识别。但是我不断收到“未解析的标识符”。
-
你导入CoreData了吗?
-
您可以在 lynda.com,Jonathan Bott 的“iOS 和 macOS 企业开发者的核心数据”课程中获得更多关于 Swift3 核心数据和并发性的信息
-
这里有一些关于如何使用 dataController.managedObjectContext 获取上下文的 Apple 文档(如果您将 App 委托核心数据实现分离到 DataController 类中)。在视图中使用:developer.apple.com/library/content/documentation/Cocoa/… 分离到另一个类中:developer.apple.com/library/content/documentation/Cocoa/…
标签: ios core-data swift3 xcode8