Ron*_*Ron 0 iphone core-data ios
我只是冒险尝试在CoreData上重写我的应用程序(之前我使用的是自己的内部保存格式).
事情大多都在起作用,虽然我对deleteObject的行为有点困惑:
我有一个对象是我的图形的一部分,当我删除它时,对象似乎没有发生任何事情.该对象具有关系,其中一些是"级联",一些是"Nullify".与对象之间的每个关系都具有反比关系.
删除对象后,唯一似乎改变的是在我的对象上设置了"isDeleted"标志.所有关系都像以前一样存在.
如果我尝试使用NSFetchRequest查找对象,则它找不到已删除的对象.但是,如果我使用KVC关系遍历我的图形,则返回的NSSet包含所有对象,包括已删除的对象.
在我将save:方法发送到我的ManagedObjectContext后,一切都如我所料.
当我删除时,是否需要手动删除我不想要的关系,或者我是否需要不断保存以保持数据的正确性?这对我来说似乎非常直观.
有什么我可以做"提交"删除或至少使我的对象图表缺乏保存.每次我想要修改我的图表时,进行保存似乎有点激烈.
谢谢,罗恩
ps以下是一些对我来说很奇怪的行为:
在删除对象之前,这是父对象的"描述",它具有categoryObjs"to many"关系:
categoryObjs = (
"0x613e1a0 <x-coredata://1A1AE9E7-66B1-4F4D-A7AB-07D4504CAE2C/TestCategory/p9>",
"0x613e1b0 <x-coredata://1A1AE9E7-66B1-4F4D-A7AB-07D4504CAE2C/TestCategory/p12>",
"0x613e190 <x-coredata://1A1AE9E7-66B1-4F4D-A7AB-07D4504CAE2C/TestCategory/p7>"
);
Run Code Online (Sandbox Code Playgroud)
删除"p12"对象(上面的中间对象)后,通过KVC访问时关系的状态不会改变.如果我尝试获取TestCategory实体,则只找到两个实体.
在"保存:"之后,p12对象消失:
categoryObjs = (
"0x613e1a0 <x-coredata://1A1AE9E7-66B1-4F4D-A7AB-07D4504CAE2C/TestCategory/p9>",
"0x613e190 <x-coredata://1A1AE9E7-66B1-4F4D-A7AB-07D4504CAE2C/TestCategory/p7>"
);
Run Code Online (Sandbox Code Playgroud)
每次调用时save:
,您的托管对象上下文都必须返回到商店并实际编写更改.这很贵.因此,deleteObject:
仅将对象标记为已删除,这将在下次保存时实际应用.(请记住,这也有助于撤消功能,它只是违背你想做的事情.)
根据文档,该isDeleted
属性只是说明在下次提交时是否要删除该对象,并isDeleted
在该对象上设置一个标志.此外,deleteObject:
如果接收器从未提交,将从上下文中删除接收器.
例如(对象A和B是NSManagedObject
实例):
对象A已标记为删除,但在您再次执行步骤2之前,实际上并未删除对象A.
与此形成对比:
对象B消失了,因为它从未保存过,没有"删除标记".它已经消失了.
编辑:
我只是好奇,你是否在为tableview的数据源使用NSFetchedResultsController?如果你还没有,那值得关注.
归档时间: |
|
查看次数: |
2045 次 |
最近记录: |