Questions tagged «core-data»

Core Data是Apple的对象建模和持久性框架,适用于iOS,iPadOS,tvOS,watchOS和macOS。Xcode提供了一个对象模型编辑器,用于指定实体,属性和关系。

5
如何判断NSManagedObject是否已删除?
我有一个NSManagedObject已被删除,并且包含该托管对象的上下文已经保存。据我所知,isDeleted返回YES如果核心数据会问持久存储在接下来的保存操作,以删除对象。但是,由于保存已经发生,所以isDeleted返回NO。 判断an包含上下文保存后是否NSManagedObject已删除的好方法是什么? (如果您想知道为什么引用删除的托管对象的对象尚不知道删除的原因,那是因为删除和上下文保存是由后台线程启动的,该后台线程使用进行删除和保存performSelectorOnMainThread:withObject:waitUntilDone:。)

5
Core-Data中的自定义设置方法
我需要foo在的子类中为字段(我们将其称为)编写自定义的setter方法NSManagedObject。foo是在数据模型中定义的,并且Xcode分别自动生成了.h和.m文件中的@property和@dynamic字段。 如果我这样写我的二传手: - (void)setFoo: (NSObject *)inFoo { [super setFoo: inFoo]; [self updateStuff]; } 然后在调用时收到编译器警告super。 或者,如果我这样做: - (void)setFoo: (NSObject *)inFoo { [super setValue: inFoo forKey: inFoo]; [self updateStuff]; } 然后我陷入无限循环。 那么为NSManagedObject的子类编写自定义设置器的正确方法是什么?

5
NSPredicate对多关系的不区分大小写匹配
我正在实现一个搜索字段,用户可以在其中输入字符串以过滤视图中显示的项目。每个显示的对象都有keywords一对多的关系,我希望能够根据其关键字过滤对象。每个关键字对象都有一个name属性,因此我设置了一个NSPredicate来进行如下所示的过滤: NSPredicate* predicate = [NSPredicate predicateWithFormat:@"keywords.name CONTAINS %@", self.searchString]; 此方法有效,但问题是搜索区分大小写,因此,如果关键字具有大写字母,但用户键入的全部为小写字母,则不会找到匹配项。我尝试了以下修改: NSPredicate* predicate = [NSPredicate predicateWithFormat:@"keywords.name CONTAINS[c] %@", self.searchString]; 但这对匹配的大小写没有影响。有没有一种方法可以仅使用普通谓词来进行不区分大小写的匹配?还是我需要在关键字类上实现某种自定义访问器,例如编写一个lowercaseName方法并与小写版本的搜索字符串进行匹配? 附录:经过进一步探索,添加自定义访问器的解决方法可以手动使用NSPredicate正常,但是在将NSFetchRequest与Core Data一起使用时根本不起作用,仅当查询Core Data模型中定义的属性时才有效。




1
在SwiftUI中将核心数据实体保存在弹出窗口中会抛出nilError,而不会再次将.environment传递给SubView
SwiftUI和Core Data的“玩法”使我陷入一个奇怪的问题。因此,情况如下: 我有一个主视图“ AppView”和一个名为“ SubView”的子视图。如果我单击NavigationTitleBar中的加号按钮(即弹出窗口或工作表),将从AppView视图中打开SubView视图。 @Environment(\.managedObjectContext) var managedObjectContext @State private var modal: Bool = false ... Button(action: { self.modal.toggle() }) { Image(systemName: "plus") }.popover(isPresented: self.$modal){ SubView() } SubView视图的形式有点小,带有两个TextField对象,用于添加一个姓氏和一个姓氏。这两个对象的输入由两个单独的@State属性处理。此表单中的第三个对象是简单按钮,该按钮应将前名和姓氏保存到附加的CoreData客户实体中。 ... @Environment(\.managedObjectContext) var managedObjectContext ... Button(action: { let customerItem = Customer(context: self.managedObjectContext) customerItem.foreName = self.forename customerItem.surname = self.surname do { try self.managedObjectContext.save() …
15 ios  swift  core-data  swiftui 

2
SwiftUI中相关实体更改时,如何更新@FetchRequest?
在SwiftUI中,View我有一个List基于@FetchRequest显示Primary实体数据和关联Secondary实体的Via 关系的数据。在View其List被正确地更新,当我添加一个新的Primary实体,新的相关辅助实体。 问题是,当我Secondary在详细视图中更新连接的项目时,数据库得到更新,但是更改未反映在Primary列表中。显然,@FetchRequest不会被另一个视图中的更改触发。 此后,当我在主视图中添加新项目时,以前更改的项目最终得到更新。 解决方法是,我另外Primary在详细视图中更新实体的属性,并且更改正确传播到Primary视图。 我的问题是:如何@FetchRequests在SwiftUI核心数据中强制所有相关的更新?特别是当我无权直接访问相关实体时@Fetchrequests? import SwiftUI extension Primary: Identifiable {} // Primary View struct PrimaryListView: View { @Environment(\.managedObjectContext) var context @FetchRequest( entity: Primary.entity(), sortDescriptors: [NSSortDescriptor(key: "primaryName", ascending: true)] ) var fetchedResults: FetchedResults<Primary> var body: some View { List { ForEach(fetchedResults) { primary in NavigationLink(destination: SecondaryView(primary: primary)) { VStack(alignment: …

1
CoreData和SwiftUI:环境中的上下文未连接到持久性存储协调器
我正在尝试通过构建一个作业管理应用程序来自学核心数据。我的代码构建良好,并且该应用程序可以正常运行,直到我尝试向列表中添加新任务。我Thread 1: EXC_BREAKPOINT (code=1, subcode=0x1c25719e8)在以下行中收到此错误:ForEach(courses, id: \.self) { course in。控制台也有此错误:Context in environment is not connected to a persistent store coordinator: <NSManagedObjectContext: 0x2823cb3a0>。 我对Core Data知之甚少,对可能的问题不知所措。我已经在数据模型中设置了“任务”和“课程”实体,其中Course与“任务”具有一对多关系。每个作业将根据特定课程进行分类。 这是用于向列表添加新分配的视图的代码: struct NewAssignmentView: View { @Environment(\.presentationMode) var presentationMode @Environment(\.managedObjectContext) var moc @FetchRequest(entity: Course.entity(), sortDescriptors: []) var courses: FetchedResults<Course> @State var name = "" @State var hasDueDate …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.