问题标签 [nsmanagedobject]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iphone - 有没有办法在不插入的情况下实例化 NSManagedObject?
我有一个用户界面来插入交易。一旦用户点击加号,他就会得到屏幕,我想实例化我的核心数据 NSManagedObject 实体让用户处理它。然后当用户点击保存按钮时,我将调用保存函数。
所以归结为代码:
PS 我在该表上使用 NSFetchedResultsController,我看到 NSFetchedResultsController 正在向表中插入一个部分和一个对象。
我的想法是,如果有一种方法可以实例化 Transaction NSManagedObject,我可以在不保存的情况下更新它,直到客户选择为止。
core-data - NSManagedObjectModel 版本标识符
NSManagedObjectModel -versionIdentifiers 的文档说,
Core Data 框架没有给模型一个默认标识符,也没有在运行时依赖这个值。对于在 Xcode 中创建的模型,您可以在模型检查器中设置此值。
我不确定,但我认为设置版本标识符可能会对我进行编码模型迁移策略类的编码有所帮助。有谁知道如何在 Xcode 中设置这些标识符?我已经摸索了很多,但没有成功。
谢谢。
iphone - 检测对 NSManagedObject 的特定属性的更改
如何检测对特定属性的更改NSManagedObject
?在我的核心数据数据模型中,我有一个Product
代表待售产品的实体。Product
实体有几个属性:price
, sku
, weight
,numberInStock
等。每当 a 的属性price
发生Product
变化时,我都需要进行冗长的计算。因此,我想知道任何更改的price
属性, [编辑]即使该更改来自合并保存在另一个线程上的上下文。这样做的好方法是什么?我的商店里有成千上万的物品;显然,向每个人发送一条消息是不可行的。 Product
Product
addObserver
我一直在使用NSManagedObjectContextObjectsDidChangeNotification
来检测更改,但它只通知我托管对象已更改,而不是该对象的哪个属性已更改。只要 a 有任何更改,我就可以重做计算Product
,但是只要不相关的属性发生更改,就会导致无用的重新计算。我正在考虑制作一个Price
实体(仅包含一个属性)并使用andprice
之间的一对一关系。这样,我可以检测到对象的变化以开始计算。这对我来说似乎过于笨拙。有没有更好的办法?Product
Price
Price
更新:
@railwayparade 指出我可以使用 的changedValues
方法NSManagedObject
来确定每个更新对象的哪些属性发生了变化。我完全错过了那个方法,如果没有在后台线程上进行更改并合并到主线程的上下文中,它将完全解决我的问题。(见下一段。)
我完全错过了NSManagedObjectContextObjectsDidChangeNotification
工作方式的一个微妙之处。据我所知,当保存在另一个线程上的托管对象上下文被合并到主线程上的上下文中时(使用 a mergeChangesFromContextDidSaveNotification:
),结果NSManagedObjectContextObjectsDidChangeNotification
仅包含有关当前在主线程的托管对象上下文中的对象的更改信息。如果更改的对象不在主线程的上下文中,则它不会成为通知的一部分。这是有道理的,但不是我所期待的。因此,我使用一对一关系而不是属性来获取更详细的更改信息的想法实际上需要检查后台线程的NSManagedObjectContextDidSaveNotification
,而不是主线程的NSManagedObjectContextObjectsDidChangeNotification
。当然,简单地使用以下changedValues
方法会更聪明NSManagedObject
正如@railwayparade 有用地指出的那样。但是,我仍然存在一个问题,即来自主线程合并的更改通知不一定包含在后台线程上所做的所有更改。
iphone - 核心数据:访问属性的两种不同方式,只有一种有效
对于以下代码,在下面的两个注释之前的行中,只有第一个有效。
第二次返回和错误
iphone - 核心数据保存到数据库不起作用
我是 iPhone 的第一次 Core Data 用户/学习者,我认为这[managedObjectContext save:$error]
是用来保存对 Persistant Store 的更改。
但是当我重新加载并调用 NSFetch 时,对象仍然存在。任何想法为什么?
iphone - insertNewObjectForEntityForName 返回错误的类型
在过去的几个小时里,我一直在努力弄清楚为什么insertNewObjectForEntityForName
会返回NSManagedObject
,即使我正在尝试插入我自己类型的实体。
我检查了一千次的事情:
- 类名称在图表设计器中设置为正确的值
- 实体与另一个实体具有多对多关系,创建另一个实体按预期工作,我确实得到了正确输入的输出,我发誓它们是相同的
发生这种情况的可能原因是什么?我不知道从哪里看,谷歌并没有多大帮助:(
编辑(已解决):
这与版本控制有关...我删除了数据模型并重新创建了它,一切都开始工作了,在以前使用过几个版本之前...叹息有时问一个问题可以让我们知道如何找到一个解决方案
我仍然对为什么会发生这种情况感到困惑,即使它现在已经解决了
core-data - NSManagedObject 子类之间看似不一致的行为
我有几个 NSManagedObject 的子类。它们都使用如下代码实例化:
或像这样:
不过,奇怪的是(来自上面的代码)
打印出“NSManagedObject”,而
打印出“实验”。
有谁知道为什么会这样?与我的其他 NSManagedObject 子类不同,MeasurementDescriptor 没有 ivars(不包括其核心数据属性)。添加 ivar 并没有改变任何东西。同样,MeasurementDescriptor 是唯一没有“关系”属性的 NSManagedObject 子类。也许这是造成这种奇怪的原因......???
iphone - 如何手动设置 NSManagedObjectID?
我想将 iPhone 上的核心数据与 Sinatra 服务器上的 MongoDB 同步。
当 iPhone 从 Node.js 聊天服务器获取消息时,该消息包含发送者的 BSON ObjectId(一个字符串)。为了让 iPhone 存储这条消息,我在 Core Data 中找到了具有相同 ID 的用户。我希望能够做类似的事情objectWithID
。换句话说,我想将 NSManagedObjectIDs 设置为与 MongoDB BSON ObjectIds 相同。我要检查的另一件事是,如果 managedObjectContext 中没有具有发件人 ID 的用户,我将从persistentStore 中获取他,如果他不存在,我将创建他。这只是为了维护 Message 和 Sender 之间的关系。也许我应该将消息对象的发送者属性存储为他的 BSON ObjectId 作为字符串而不是作为用户 NSManagedObject。
你有什么建议吗?我也应该在 iPhone 上使用 MongoDB 吗?我刚刚意识到它有一个 Objective-C 驱动程序。但我刚刚开始掌握 Core Data 的窍门,它有一些我可能想要使用的很酷的东西(比如撤销支持)......现在,我只是将它用于简单的获取和持久存储,所以我可以代替它。但我计划在未来实现撤消支持,只是因为我认为这是很好的可用性。我更喜欢撤消选项而不是必须回答确认弹出窗口,例如,我喜欢 GMail 如何让您撤消发送或撤消删除消息等。
谢谢!
马特
objective-c - 具有非托管属性的托管对象会出错吗?
Core Data 文档说,如果需要,对象可能会因节省内存而出错。如果您有一个对象的属性不是托管属性,会发生什么?
例如,假设您有一个 Department 类,它是 NSManagedObject 的子类。它有一个位置 iVar + 访问器。location 属性不是 Department 的属性;它不受管理,也从未持续存在。
如果您有一个 Department 对象数组,或者一个与 Department 一对一关系的 Employee 对象,那么 Department 是否有可能出错?如果你设置了Department.location,你能确定这个位置会一直在那里吗,还是有可能是Department出错了,那么你就丢失了存储在location中的值?
iphone - 是否可以在获取请求期间让 Core Data 对 To-Many 关系的“多”部分进行排序?
我正在使用 Core Data 来缓存大量信息,并且在我的托管对象之间设置了多对多关系。自然地,我使用 NSFetchRequest 来获取该关系的奇异方面的数组。但是,我使用关系的“多”端填充 UITableView,并且我希望在提取数据时按字母顺序对其进行排序。
如果我不清楚,这里有一个例子:
“员工”和“老板”都是一对多关系中的 NSManagedObjects - 每个老板都有很多员工,但员工只有一个老板。在检索了一系列老板之后,我推送了一个包含员工列表的 UITableViewController。我希望在 NSFetchRequest 期间对员工进行预排序,以便更轻松地显示它们。这是可能的,我将如何去做?