代码之家  ›  专栏  ›  技术社区  ›  Leonardo

了解NSManagedObject

  •  2
  • Leonardo  · 技术社区  · 16 年前

    在一个现有的项目中,我已经尝试在项目创建很久之后引入核心数据,因此它的模型已经就位。 该类应该充当应用程序中对象的全局存储。 该类正确地实现了NSManagedObject,并且我已经验证了它是在上下文中创建和保存的,还使用一个fetch结果进行了检索。

    @interface WZMPersistentStore : NSManagedObject<NSCoding> {
     NSMutableArray *persistentStorage;
    }
    
    @property(nonatomic,retain) NSMutableArray *persistentStorage;
    
    -(void)add:(id)element;
    -(void)remove:(id)element;
    -(id)objectAtIndex:(NSUInteger)index;
    -(NSUInteger)num;
    
    @end
    

    在实现中,我还重写initWithEntity,如下所示:

    - (id)initWithEntity:(NSEntityDescription*)entity insertIntoManagedObjectContext:(NSManagedObjectContext*)context {
     NSLog(@"init with entity");
     [super initWithEntity:entity insertIntoManagedObjectContext:context];
    
     return [self init];
    }
    

    init方法只初始化可变数组,我可以从日志中看到,在创建实体时,app委托正确地调用了它。 add方法只是将messageinsertobject发送到persistentStorage。

    1. 我在“概念上”做得对吗?我 托管对象中的变量和 像我一样?
    2. 当ns记录 即使是在 addObject消息 是的,我又核实过了 正确添加1) .
    3. 存储在托管对象中的对象 具有属性的普通类。是 我有点事要处理 在运行时没有得到任何错误。
    2 回复  |  直到 10 年前
        1
  •  2
  •   Justin    16 年前

    ,这不是“正确”的方法。可以在中执行实例变量的初始化 awakeFromFetch

    覆盖 initWithEntity:insertIntoManagedObjectContext: , dealloc finalize . 更改值 初始化ntity:insertIntoManagedObjectContext: 方法不会被 如果你不小心, 初始化自定义应该是 方法。如果你超控了 初始化ntity:insertIntoManagedObjectContext: 你一定要遵守规则 说明[…]( NSManagedObject Class Reference )

    要想真正帮上忙,我需要对你的目标有更深入的了解。不管怎样,我强烈建议梳理一下苹果的 Core Data Programming Guide 和样本代码。

        2
  •  0
  •   Leonardo    16 年前

    我终于设法解决了这个问题。即使我是objective-c的新手,我认为在项目完成后引入核心数据也不是一个好主意。即使许多人声称这很容易。不幸的是,所有这么说的人都在展示一些非常简单的教程,其中一个实体只有一个字符串属性需要更改。 相反,对于我的项目,除了现有的代码之外,我还编写了很多代码,加上一些子类(例如NSManagedObject),这些子类破坏了原始模型。这个添加的代码也必须仔细编写。派生问题可以简单到属性未保存,也可以危险到删除错误的实体。

    对于我的问题:

    -第二点,正如我所说的,相关对象在编码/代码方面有一些问题。

    -第三点,我错了,有很多代码要写,这取决于相关类的复杂程度。