iPhone核心数据:如何将NSSet从一个实体复制到另一个实体?

问题描述:

此代码用于制作“初始数据”或“测试数据”。iPhone核心数据:如何将NSSet从一个实体复制到另一个实体?

Category实体将携带默认typesSubcategory实体将从Category复制默认types。 他们不会使用相同的types,因为新的或旧的types可能会被删除或添加到Subcategory

-(void)newCat:(NSString*)catName subCat:(NSArray*)subCatNames types:(NSArray*)typeNames{ 
//get the context 
NSManagedObjectContext *context = [self managedObjectContext]; 

//make a category 
Category *theCat = [NSEntityDescription 
     insertNewObjectForEntityForName:@"Category" 
     inManagedObjectContext:context]; 
theCat.name = catName; 

//make default types and put it in the category 
for (int i = 0; i < [typeNames count]; i++) { 
    Type *type = [NSEntityDescription 
     insertNewObjectForEntityForName:@"Type" 
     inManagedObjectContext:context]; 
    type.name = [typeNames objectAtIndex:i]; 
    [theCat addTypesObject:type]; 
} 

//make some subcategories 
//copy default types from category to subcategory 
for (int i = 0; i < [subCatNames count]; i++) { 
    Subcategory *newSubcat = [NSEntityDescription 
     insertNewObjectForEntityForName:@"Subcategory" 
     inManagedObjectContext:context]; 

    newSubcat.name = [logbookNames objectAtIndex:i]; 
    newSubcat.category = theCat; 
    [newSubcat addTypes:theCat.types]; 
} 

//save the context 
[self save]; 

} 

这种方法是我第一次打开应用程序。一旦我终止并重新打开应用程序,除了一个Subcategory实体保留types

为什么其他Subcategory删除types?我担心我只会在Category中设置一个指向默认types的指针。

如何复制Category.types并将其设置为Subcategory.types中的类型?

设计明智,我应该创建一个新的实体来保存类别的默认类型,而不是使用默认和非默认的相同实体?

+0

嗯,我发现了一个修复程序,我不知道这是否是正确的方法,但我列举了默认类型。 – ssj 2010-10-23 22:44:31

你类型是一个标准的对象,你可以接受并使[类型复制] 之后,你可以做你想要的东西。