2011-06-22 70 views
3

我有一個實體類,在託管上下文中正確定義。 該課程與其他課程有一對多的關係。CoreData如何管理類關係創建?

Xcode 4圖形工具正確創建派生類,並且該關係由NSSet表示。

我想知道如何管理關係類的創建。 我的意思是,創建主要實體我使用

NSManagedObject *newEntity = [NSEntityDescription 
insertNewObjectForEntityForName:@"EntityName" 
inManagedObjectContext:context]; 
有關的NSSet的關係

可是什麼?我是否需要以與父母實體相同的方式創建它,並將其定期存儲在NSSet中?

NSManagedObject *child = [NSEntityDescription insertNewObjectForEntityForName:@"ChildName" inManagedObjectContext:context]; 

NSSet *childSet = [..set creation with child..]; 
newEntity.child = childSet; 

// save newEntity in context 

如果是,由於NSSet是一個對象,爲什麼不需要從上下文開始創建它?這樣的問題可以應用於實體中的所有「常規」屬性,NSString也是一個對象,爲什麼簡單的newEntity.prop = @「」就足夠了?

回答

3

對於多對多關係NSManagedObject有一個mutableSetValueForKey:方法,該方法返回您將使用的集合。隨着newEntitychild如上定義你會做這樣的事情:

NSMutableSet *childObjects = [newEntity mutableSetValueForKey:@"childRelationship"]; 
[childObjects addObject:child]; 

但你說你的Xcode爲您的核心數據實體的自定義子類,所以你必須在Parent類將定義一個方便的方法被命名爲addChildObject:。使用,你可以替換上面的一個簡單的版本,但你也需要申報newEntity因爲這樣子類的實例,而不是作爲一種通用的NSManagedObject:

Parent *parent = [NSEntityDescription insertNewObjectForEntityForName:@"EntityName" inManagedObjectContext:context]; 
NSManagedObject *child = [NSEntityDescription insertNewObjectForEntityForName:@"ChildName" inManagedObjectContext:context]; 

[parent addChildObject:child]; 
+0

呃... ...感謝,認爲解決問題,我也注意到Xcode自動爲我寫了一些方便的方法,我也會看一下。 – Leonardo