在一个现有的项目中,我尝试在项目创建很久之后引入核心数据,因此它的模型已经到位。我已经创建了xcdatamodel,并在其中添加了我唯一的类。该类应该充当应用程序中对象的全局存储。这个类正确地实现了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。由此产生的问题如下:
发布于 2010-08-01 19:07:51
我终于设法解决了这个问题。即使我是目标-c方面的新手,我认为在项目完成后引入核心数据也不是一个好主意。即使很多人声称这很容易。不幸的是,所有这么说的人都证明了一个实体的简单教程,其中有一个字符串属性需要更改。相反,在我的项目中,除了现有的代码之外,我还编写了许多代码,加上一些子类(例如NSManagedObject),这些子类破坏了原始模型。这个添加的代码也必须仔细编写。派生的问题可以很简单,就像没有保存的属性,或者删除错误的实体一样危险。
事实上,我的问题是由于序列化过程中涉及的类中的解码和编码方法配置错误。
对于我的问题:
-Point one仍然没有答案,因为我对目标c还没有信心。
-Point 2,正如我所说的,相关对象在编码/代码方面有一些问题。
-Point三,我错了,有很多代码要写,这取决于相关类的复杂程度。
发布于 2010-08-06 03:20:55
No,这不是“正确”的方法。可以在awakeFromFetch中执行实例变量的初始化。苹果针对NSManagedObject子类的指导原则包括以下内容:
还不鼓励您重写
initWithEntity:insertIntoManagedObjectContext:、dealloc或finalize。上下文将不会注意到更改initWithEntity:insertIntoManagedObjectContext:方法中的值,如果您不小心,则可能不会保存这些更改。大多数初始化自定义应该在清醒的…中执行。方法。如果确实覆盖了initWithEntity:insertIntoManagedObjectContext:,则必须确保遵守“方法描述..。”中规定的要求。
要真正帮助你,我需要对你想要完成的事情有一个更深入的了解。无论如何,我强烈建议在继续之前梳理一下苹果的核心数据编程指南和示例代码。
https://stackoverflow.com/questions/3377694
复制相似问题