SwiftUI核心数据-NSPredicate动态筛选字符串数组属性包含给定字符串的位置

SwiftUI核心数据-NSPredicate动态筛选字符串数组属性包含给定字符串的位置,swift,core-data,swiftui,nspredicate,nsfetchrequest,Swift,Core Data,Swiftui,Nspredicate,Nsfetchrequest,基本上正如标题所说 我正在尝试获取'Goal',它有一个字符串数组类型的'tags'属性,其中'tags'包含一些字符串类型的标记 在SwiftUI视图的init()中 self.tag = tag self.results = FetchRequest( entity: Goal.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \Goal.createdDate, ascending:

基本上正如标题所说

我正在尝试获取'Goal',它有一个字符串数组类型的'tags'属性,其中'tags'包含一些字符串类型的标记

在SwiftUI视图的init()中

self.tag = tag

self.results = FetchRequest(
            entity: Goal.entity(),
            sortDescriptors: [NSSortDescriptor(keyPath: \Goal.createdDate, ascending: true)],
            predicate: NSPredicate(format: "tags LIKE %@", "\(self.tag.wrappedTitle)")
LIKE不会抛出错误,但也不会获取任何内容,即使它应该这样做。
CONTAINS抛出EXC\u BAD\u访问错误,
在抛出“NSInvalidArgumentException”中,原因:“-[NSTaggedPointerString CountByEnumerating with State:objects:count:::发送到实例0xa6a3cbf31284b686的无法识别的选择器”。不太清楚这个错误是什么意思

我可以获取所有目标,并且只能在视图主体中的ForEach循环中显示标记包含字符串的目标,但我认为这不是有效的内存使用

供参考,目标接口

public class Goal : NSManagedObject, Identifiable {
}

extension Goal {

    @NSManaged public var id: UUID? { get set }

    @NSManaged public var title: String? { get set }

    @NSManaged public var notes: String? { get set }

    @NSManaged public var tags: [String]? { get set }

    @NSManaged public var createdDate: Date? { get set }

    @NSManaged public var deadlineDate: Date? { get set }

    @NSManaged public var completedDate: Date? { get set }

    @NSManaged public var isActive: Bool { get set }

    @NSManaged public var isArchived: Bool { get set }

    @NSManaged public var previousIterations: [UUID]? { get set }

    @NSManaged public var hasBeenDeleted: Bool { get set }

    @NSManaged public var deletedDate: Date? { get set }
}
有人能帮忙吗

编辑:正如回复中正确指出的那样,动态筛选可转换的数据类型是不可能的:(解决方法是获取所有数据并在函数中进行筛选。

您可以尝试:

NSPredicate(format: "%@ IN tags", "\(self.tag.wrappedTitle)")
您可以尝试:

NSPredicate(format: "%@ IN tags", "\(self.tag.wrappedTitle)")

您会为
目标显示自动生成的接口吗?
?当然。现在添加。由于
标记
是一个可转换的属性,因此无法将基于它的谓词用作获取请求的一部分。有一些解决方法,但我建议将其替换为与
标记
实体的对多关系(可能有一个到多个倒数)。是否显示
目标
的自动生成接口?当然。现在添加。由于
标记
是一个可转换属性,因此无法将基于它的谓词用作获取请求的一部分。有一些解决方法,但我建议将其替换为与
标记
实体的对多关系(可能是一对多的倒数)。