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

时间:2010-10-23 13:50:10

标签: iphone objective-c core-data

此代码用于制作“初始数据”或“测试数据”。

Category实体将带有默认typesSubcategory实体将从types复制默认Category。 他们不会使用相同的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?我担心我只是在types中设置指向默认Category的指针。

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

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

1 个答案:

答案 0 :(得分:0)

你输入的是一个标准对象,你可以接收并制作[类型复制] 之后,你可以用它做你想做的事。