2010-07-31 51 views
2

在一个现有项目中,我试图在项目创建后很久才引入Core Data,因此它的模型已经就位。 我创建了xcdatamodel并添加了我的唯一类。 该类应该充当应用程序中对象的全局存储。 该类正确实现NSManagedObject,并且我已验证它是否已创建并保存在上下文中,并且也可以使用提取结果进行检索。了解NSManagedObject

在这个类中保存数据的方法是通过NSMutableArray。但这只是不起作用。下面是这个类的一个片段:

@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方法只初始化可变数组,我可以从日志中看到它在创建实体时被应用程序委托正确调用。 add方法只是将消息insertObject发送到persistentStorage。 来自这个问题:

  1. 我在做“概念上”是正确的吗? I 的意思是,在管理对象中有变量 变量是否正确,并且像我这样初始化了 ?
  2. 当NS记录的 persistentStorage的大小,我总是得到0 ADDOBJECT消息之后登录了一下,即使 (编辑:这不是 真的,我再次验证了我 正确地得到加1)
  3. 存储在被管理对象 中的对象槽持久存储是 具有属性的普通类。 有什么我需要做的 他们?我想不是因为我在运行时没有收到任何错误,所以我是 。
+0

我真的非常渴望这个...: - | – Leonardo 2010-07-31 18:27:30

回答

0

我终于设法解决了这个问题。即使我是Objective-C的新手,我认为在项目完成后引入核心数据并不是一个好主意。即使很多人声称这很容易。不幸的是,所有这样说的人都证明了一个真正简单的教程,其中一个实体的一个字符串属性可以改变。 相反,对于我的项目,除了现有的代码之外,我还写了很多代码,还有一些破坏原始模型的子类(例如NSManagedObject)。这个添加的代码也要仔细写。派生的问题可以像保存属性一样简单,或者像删除错误的实体一样危险。

事实上,我的问题是由于在序列化过程中涉及的类中的解码和编码方法中的错误配置。

对于我的问题:

- 点一个仍然没有答案,因为我不是在Objective-C

- 点2还没有信心,正如我所说的相关对象有一些问题,编码/代码。

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

2

,这不是“正确”的方法。您可以在awakeFromFetch中执行实例变量的初始化。为NSManagedObject子类苹果的指导方针包括以下内容:

您也从 气馁覆盖 initWithEntity:insertIntoManagedObjectContext:dealloc,或finalize。更改 , initWithEntity:insertIntoManagedObjectContext: 方法将不会被 上下文注意到,如果您不小心,可能无法保存这些更改。大多数 初始化定制应该是 执行清醒... 方法之一。如果你重写 initWithEntity:insertIntoManagedObjectContext:, 你必须确保你坚持列明的方法 描述 要求[...](NSManagedObject Class Reference

真正帮助,我需要一个更深入的了解你想要完成什么。无论如何,我强烈建议在继续之前梳理Apple的Core Data Programming Guide和示例代码。