Core data 获取请求结果、核心数据&;斯威夫特3

Core data 获取请求结果、核心数据&;斯威夫特3,core-data,entity,nsfetchrequest,swift3,beta,Core Data,Entity,Nsfetchrequest,Swift3,Beta,既然NSFetchResultsController和NSFetchRequest在Swift 3中是泛型的,那么在初始化中有一些更改。我使用了migrator(非常棒!),所有的东西都编译得很好。但是当我尝试用Swift 2方式检索属性时,应用程序崩溃了 我已经彻底研究了这个问题 关于如何初始化NSFetchResultsController和NSFetchRequest的示例很少,但是在解释检索时,StackOverflow上的各种响应相互竞争,或者目前还不充分。苹果的文档也很清楚,但不起作

既然NSFetchResultsController和NSFetchRequest在Swift 3中是泛型的,那么在初始化中有一些更改。我使用了migrator(非常棒!),所有的东西都编译得很好。但是当我尝试用Swift 2方式检索属性时,应用程序崩溃了

我已经彻底研究了这个问题

关于如何初始化NSFetchResultsController和NSFetchRequest的示例很少,但是在解释检索时,StackOverflow上的各种响应相互竞争,或者目前还不充分。苹果的文档也很清楚,但不起作用

以下是我的代码,其中Person是实体:

// MARK: - Initialize Fetch Results

var fetchedResultsController = NSFetchedResultsController<Person>()

    func setFetchRequest() -> NSFetchRequest<Person> {

    do {

        let fetchRequest: NSFetchRequest<NSFetchRequestResult> = Giver.fetchRequest()

        let fetchResult = try moc?.fetch(fetchRequest)


        // CANNOT FIGURE OUT WHAT GOES HERE e.g.

        // person.name = fetchResult.first (this does not work)

        // person.name = fetchResults (this does not work)


        let sortDescriptor = SortDescriptor(key: "names", ascending: false)

        fetchRequest.sortDescriptors = [sortDescriptor]

    } catch {

        print("Error with request: \(error)")
    }

    return setFetchRequest()
}

// MARK: - Retrieve Fetch Request

func getFetchRequest() -> NSFetchedResultsController<Giver> {

    fetchedResultsController = NSFetchedResultsController(fetchRequest: setFetchRequest(), managedObjectContext: moc!, sectionNameKeyPath: nil, cacheName: nil)

    return fetchedResultsController
}
//标记:-初始化获取结果
var fetchedResultsController=NSFetchedResultsController()
func setFetchRequest()->NSFetchRequest{
做{
let fetchRequest:NSFetchRequest=Giver.fetchRequest()
让fetchResult=try moc?.fetch(fetchRequest)
//我搞不懂这里发生了什么。
//person.name=fetchResult.first(这不起作用)
//person.name=fetchResults(这不起作用)
让sortDescriptor=sortDescriptor(键:“名称”,升序:false)
fetchRequest.sortDescriptors=[sortDescriptor]
}抓住{
打印(“请求错误:\(错误)”)
}
返回setFetchRequest()
}
//标记:-检索提取请求
func getFetchRequest()->NSFetchedResultsController{
fetchedResultsController=NSFetchedResultsController(fetchRequest:setFetchRequest(),managedObjectContext:moc!,sectionNameKeyPath:nil,cacheName:nil)
返回获取的ResultsController
}
目前,没有错误,请保存指示未使用“fetchResult”的黄色三角形。我正在尝试获取一些属性:name:String、age:Int、photo:BinaryData。如何检索这些属性

我意识到Swift 3仍处于测试阶段。刚刚经历了源代码中断的痛苦而感到沮丧。

有两个问题:(1)您能添加关于崩溃的信息吗?与错误消息一样,堆栈跟踪。(2) 为什么要执行提取,然后才添加排序描述符?当然(1)线程1:EXC_BAD_ACCESS,code=2,address=0x16fc8ffco当我点击tabBar图标时,应用程序冻结,并出现lldb错误。问题似乎与提取有关。(2) 我不知道订单很重要。它以前在Swift 2.2So中工作过,我在do-try-catch语句中尝试了=try-moc.fetch(fetchRequest)。这是控制台中的响应:警告:无法加载任何Objective-C类信息。这将大大降低可用类型信息的质量。(lldb)两个问题:(1)能否请您添加有关坠机的信息?与错误消息一样,堆栈跟踪。(2) 为什么要执行提取,然后才添加排序描述符?当然(1)线程1:EXC_BAD_ACCESS,code=2,address=0x16fc8ffco当我点击tabBar图标时,应用程序冻结,并出现lldb错误。问题似乎与提取有关。(2) 我不知道订单很重要。它以前在Swift 2.2So中工作过,我在do-try-catch语句中尝试了=try-moc.fetch(fetchRequest)。这是控制台中的响应:警告:无法加载任何Objective-C类信息。这将大大降低可用类型信息的质量。(lldb)