在现有项目中,我尝试在项目创建很久之后引入Core Data,因此其模型已经到位。 我创建了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。 由此产生的问题:
答案 0 :(得分:2)
否,这不是“正确”的做法。您可以在awakeFromFetch
中执行实例变量的初始化。 NSManagedObject子类的Apple准则包括以下内容:
你也沮丧 覆盖
initWithEntity:insertIntoManagedObjectContext:
,dealloc
或finalize
。改变价值观 在里面initWithEntity:insertIntoManagedObjectContext:
方法不会被注意到 上下文,如果你不小心, 这些更改可能无法保存。最 初始化定制应该是 在其中一个清醒中表演...... 方法。如果你覆盖initWithEntity:insertIntoManagedObjectContext:
, 你必须确保你坚持 方法中规定的要求 说明[...](NSManagedObject Class Reference)
要真正提供帮助,我需要更深入地了解您要完成的任务。无论如何,我强烈建议在继续之前梳理Apple的Core Data Programming Guide和示例代码。
答案 1 :(得分:0)
我终于设法解决了这个问题。即使我是objective-c的新手,我认为在项目完成后引入核心数据也不是一个好主意。即使许多人声称这很容易。不幸的是,所有人这样说,都显示了一个实体的简单教程,其中一个实体有一个字符串属性可以改变。 相反,对于我的项目,除了现有的代码之外,我最终还编写了许多代码,加上一些子类化(例如NSManagedObject),它打破了原始模型。添加的代码也必须仔细编写。派生问题可以像未保存的属性一样简单,也可以像删除错误的实体一样危险。
事实上,我的问题是由于序列化过程中涉及的类中的解码和编码方法配置错误。
我的问题:
-Point one仍然没有答案,因为我对objective-c
还不自信-Point二,正如我所说,相关对象在编码/代码方面存在一些问题。
- 第三点,我错了,需要编写很多代码,具体取决于相关类的复杂程度。