iphone - 核心数据 : setPrimitiveValue and saving changes

标签 iphone ios core-data save primitive

在 Core Data 中,当使用 setPrimitiveValue 与对象的常规访问器方法进行更改时,是否有一些技巧可以保存对托管对象属性的更改?

为了避免触发我的 FRC 的通知方法(controllerWillChangeContent、controllerDidChangeObject 等),我已经在一些场景中切换到使用 setPrimitiveValue 和 setPrimitiveAttributeName。在这两种情况下,在对核心数据对象进行更改并保存托管对象上下文之后,所做的更改看起来像是已完成(即我可以使用 NSLog 看到更改)但实际上它们丢失了(即如果我退出应用程序模拟器并重新运行它,FRC 重新加载,我认为我更改的属性消失了)。

保存代码是从 Apple 示例中复制的,我的核心数据实体的托管对象类是由 Xcode 生成的。我从 Apple 和这个网站上读到的所有内容都表明这是对 setPrimitive 方法的有效使用,尽管我承认我一定对这些 setPrimitive 函数的真正工作方式缺乏一些了解......

代码:

// header file for Managed Object sub class generated by xcode from my core data entity:
#import <CoreData/CoreData.h>
@interface PlannedItem :  NSManagedObject  
{
}

@property (nonatomic, retain) NSNumber * ptType;
@property (nonatomic, retain) NSNumber * whenOrder;
@end

// .m file for Managed Object subclass
#import "PlannedItem.h"
@implementation PlannedItem 

@dynamic ptType;
@dynamic whenOrder;

@end

// trying to use setPrimitiveValue or even setPrimitiveWhenOrder to modify
// this is in my view controller
// p is a pointer to PlannedItem
int oldOrder = [p.whenOrder intValue];
[p setPrimitiveValue:[NSNumber numberWithInt:(oldOrder +1)] forKey:@"whenOrder"];


// later on in same method, save is executed.  
if (![[self managedObjectContext] save:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}
NSLog(@"Saved");    

感谢任何提示

最佳答案

如果您不希望通知处理程序中的代码执行(顺便说一句,您为什么要这样做?),禁用那个可能比完全避免通知更容易。另外,请记住,Core Data 使用这些通知来更新您的关系并在您进行更改时保持模型的一致性。

在您的 View Controller 中,设置一个 bool 值并根据您的需要设置它是否执行通知处理程序代码。然后,在您的处理程序中检查该标志,例如:

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller {
    if (notificationIgnored) {
        return;
    }
    // rest of the code...
}

关于iphone - 核心数据 : setPrimitiveValue and saving changes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6205432/

相关文章:

iphone - UIGestureRecognizer 的子类仅在一个 UIImageView 上工作

ios - 带有 unicode NSString 的 UILabel 文本

ios - 核心数据实体可以与其自身有关系吗?

ios - 如果不运行使用它的应用程序,可以在 iPad 上看到 Core Data 吗?

core-data - 核心数据 : NSObjectID and NSTemporaryObjectID leaks

ios - 如何以编程方式获取 iphone 的 MAC 地址

iphone - 我们可以使用 NSMutable 对象作为非 NSMutable 类的成员吗

ios - 触摸有问题

ios - 在使用 cordova 的 iOS 应用程序中找不到 PushPlugin

iphone - 从对象 init 的 GCD 安全地调用后面的 UIViewController 方法