我在 iPhone 应用程序中使用核心数据。我创建了一个简单的类Friend,它源自NS管理对象并使用以下属性:
@property (nonatomic, retain) NSString *name;
我能够在我的上下文中添加和删除此类的实例,并且我的更改也是持久的。
现在我想要更新/修改 a Friend-实例并再次使其持久化。
但这似乎行不通。
这是显示我的问题的代码:
// NSManagedObjectContext *context = < my managed context>
// NSFetchedResultsController *nsfrc= < my fetched result controller>
NSEntityDescription *entity = [nsfrc entity];
NSManagedObject *newManagedObject = [NSEntityDescription
insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
Friend *f = (Friend *) newManagedObject;
f.name = @"name1";
//1. --- here context.hasChanges == 1 --- ok
NSError *error = nil;
if (![context save:&error]) { ... }
//2. --- here context.hasChanges == 0 --- ok
f.name = @"name2";
//3. --- here context.hasChanges == 0 --- nok?
if (![context save:&error]) { ... }
在评论1一切都很好。我得到了一个新的NS管理对象 of the Friend-type,我可以更改名称属性。上下文告诉我有一些东西可以保存。
保存上下文后我看到上下文.hasChanges == 0。另请注意,保存上下文后数据是持久的。
在评论 2 之后,我更改了 name 属性。现在我期望上下文.hasChanges == 1并且也在之后上下文保存我希望新名称能够持久。
但不幸的是事实并非如此。再次启动应用程序,加载Friend名称属性 = 的实例@"name1".
我在核心数据文档中找不到任何提示或示例。那么我做错了什么?
我需要做什么来更新/修改现有的Friend-实例并使其持久化?
我看到的唯一解决方案是删除该条目,更改它,然后再次添加。但我认为这不是正确的方法。
Thanks!
无法识别更改可能是由于您在子类实现中使用了 @synthesize 而不是 @dynamic。 CD 提供了自己的访问器,您可以使用 @synthesize 绕过它
马丁
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)