gpt4 book ai didi

swift - 将从 ManagedObjectContext 过滤的对象转换为 NSArray

转载 作者:行者123 更新时间:2023-11-30 10:18:34 25 4
gpt4 key购买 nike

我对 iOS 还比较陌生,我发现自己在一项核心数据作业中“被扔进了狼群”。我正在尝试使用 NSPredicate 创建 Note 对象数组来搜索 managedObjectContext。这不起作用,但我想我已经接近“终点线”了。这是我得到的:

我实例化了一个 managedObjectContext 并且其中有 Note 对象。

我在类的顶部创建了一个名为 filteredNotes 的变量,该变量实例化为空(至少我是这么认为的)。

var filteredNotes: [Note] = []

再往下,我有一个函数,我想用与谓词匹配的注释对象“填充”filteredNote 数组。我正在尝试这样做:

    let resultPredicate = NSPredicate(format: "noteTitle contains[c] %@", searchBar.text)

filteredNotes = (managedObjectContext as! NSArray).filteredArrayUsingPredicate(resultPredicate)

编译器对此有这样的说法:

  1. 从“NSManagedObjectContext 转换?”不相关的类型“NSArray”总是失败
  2. 无法将“[AnyObject]”类型的值分配给“[Note]”类型的值

我看到很多普通 NSArrays (不是 managedObjectContexts)这样做的例子,我很困惑为什么我不能用 做到这一点ManagedObjectContext 充满了 Note 对象。

这是我的 Note: NSManagedObject 的样子:

import Foundation
import CoreData

class Note: NSManagedObject {

@NSManaged var dateCreated: NSDate
@NSManaged var dateEdited: NSDate
@NSManaged var noteTitle: String
@NSManaged var noteBody: String

}

关于如何创建 filteredNote 数组有什么建议吗?

最佳答案

托管对象上下文与数组无关。它不能被物体“填充”。它只是一个抽象类,可让您访问数据。

从核心数据存储中获取对象的方式如下:发出获取请求,可以选择向请求添加过滤器和/或排序,获取对象。

let request = NSFetchRequest(entityName:"Note")
let result = managedObjectContext.executeFetchRequest(request error:nil) as [Note]

您现在可以过滤此数组(在转换为 NSArray 后使用 filteredArrayUsingPredicate),也可以将谓词添加到原始获取请求中(这应该更高效)。

关于swift - 将从 ManagedObjectContext 过滤的对象转换为 NSArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28687720/

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