我创建了一个包含两个实体的模型。实体A与实体B有一种关系(对一)。我的问题是,我不知道如何为关系设置默认值。如果我向实体AI添加一个新条目,则为关系的值获取“无值”(发送到相应的NSArrayControler或[newObjectEntityA initWithEntity:....]的动作。我缺少的是一种分配方法关系的默认值,如属性。
示例:
Entity A
attrib a (has a default value)
attrib b (has a default value)
relation to B (has no default value)
当然,解决方法是这样的:
[newObjectEntityA setValue: defaultValueInEntityB forKey:@"relationToB"];
但我认为必须有一个更方便的解决方案。
提前致谢, 托马斯
答案 0 :(得分:3)
您应该覆盖awakeFromInsert
,此方法旨在添加默认值和其他启动操作。
答案 1 :(得分:1)
我会创建一个Factory,它创建A的新对象并根据您的需要预先配置它。
答案 2 :(得分:0)
@implementation Locos
static NSManagedObject *defaultType;
- (id)initWithEntity:(NSEntityDescription *)entity insertIntoManagedObjectContext:(NSManagedObjectContext *)context
{
self=[super initWithEntity:entity insertIntoManagedObjectContext:context];
if(self==nil)
{
[self release];
return(nil);
}
if(defaultType==nil)
{
NSEntityDescription* locoType=[NSEntityDescription entityForName:@"LocoType" inManagedObjectContext:context];
if(locoType==nil) return(self);
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:locoType];
NSPredicate *predicate=[NSPredicate predicateWithFormat:@"Default==TRUE"];
[request setPredicate:predicate];
[context executeFetchRequest:request error:nil];
NSArray *array=[context executeFetchRequest:request error:nil];
defaultType=[array objectAtIndex:0];
}
if(defaultType!=nil)
{
[self setPrimitiveValue: defaultType forKey:@"Type"];
}
return(self);
}
@end
它将实体“Locos”中的“Type”关系设置为实体“LocoType”中的第一条记录,其中属性“Default”设置为true。它有效,但有一些我不明白的东西。如果我将方法简化为:
,我会得到一个非常奇怪的效果@implementation Locos
- (id)initWithEntity:(NSEntityDescription *)entity insertIntoManagedObjectContext:(NSManagedObjectContext *)context
{
self=[super initWithEntity:entity insertIntoManagedObjectContext:context];
if(self==nil)
{
[self release];
return(nil);
}
NSEntityDescription* locoType=[NSEntityDescription entityForName:@"LocoType" inManagedObjectContext:context];
if(locoType==nil) return(self);
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:locoType];
NSPredicate *predicate=[NSPredicate predicateWithFormat:@"Default==TRUE"];
[request setPredicate:predicate];
[context executeFetchRequest:request error:nil];
NSArray *array=[context executeFetchRequest:request error:nil];
[self setPrimitiveValue: [array objectAtIndex:0] forKey:@"Type"];
return(self);
}
@end
在这种情况下,如果我按下一个按钮,该按钮必须添加:数组控制器(绑定到实体'Locos'),我总是得到两个新条目!我运行调试器,方法initWithEntry只被调用ONCE。我删除行
后也会解决问题 [context executeFetchRequest:request error:nil];
如果仅在第一个代码示例中调用fetch,也不会发生这种情况,我将记录存储在静态变量中。
有人知道那里发生了什么吗?