gpt4 book ai didi

iphone - 将 NSManagedObject 的实例添加到 NSManagedObjectContext 正常,更新同一实例失败

转载 作者:行者123 更新时间:2023-12-03 19:09:48 27 4
gpt4 key购买 nike

我正在我的 iPhone 应用程序中使用核心数据。我创建了一个简单的类 Friend,它派生自 NSManagedObject 并使用以下属性:

@property (nonatomic, retain) NSString *name;

我能够在我的上下文中添加和删除此类的实例,并且我的更改也是持久的。
现在我想更新/修改一个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 处,一切都很好。我得到了一个 Friend 类型的新 NSManagedObject,我可以更改 name 属性。上下文告诉我有一些东西可以保存。保存上下文后,我看到 context.hasChanges == 0。另请注意,保存上下文后数据是持久的。

在评论 2 之后,我更改了 name 属性。现在我希望 context.hasChanges == 1 并且在上下文保存之后我希望新名称是持久的。但不幸的是事实并非如此。再次启动应用程序,加载带有 name-property = @"name1"Friend 实例。

我在核心数据文档中找不到任何提示或示例。那么我做错了什么?我需要做什么来更新/修改现有的 Friend 实例并使其持久化?

我看到的唯一解决方案是删除该条目,更改它,然后再次添加。但我认为这不是正确的方法。

谢谢!

最佳答案

无法识别更改可能是由于您在子类实现中使用了 @synthesize 而不是 @dynamic。 CD 提供了自己的访问器,您可以使用 @synthesize 绕过它马丁

关于iphone - 将 NSManagedObject 的实例添加到 NSManagedObjectContext 正常,更新同一实例失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3329055/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com