我的核心数据设置如下:
SALES_REP
< --->> CUSTOMER
< ---->> PURCHASE_AGREEMENT
<< ------->> PRODUCTS
在应用程序中,销售代表可以更改PRODUCTS
实体的属性,这会触发对PURCHASE_AGREEMENT
的更改。当他们完成编辑工作PA
时,他们可以通过Web服务提交到我们的CRM(SAP)或在本地保存他们的工作。
我理解(至少我认为我这样做:D)如何创建新的NSManagedObject
并为其添加值的属性:
NSManagedObject* newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"PA" inManagedObjectContext:self.moc];
//get the entity descriptions for PA, Customer, PA_Products and Sales_Rep
NSEntityDescription* PAEntity = [NSEntityDescription entityForName:@"PA" inManagedObjectContext:self.moc];
NSDictionary* dictPAAttributes = [PAEntity attributesByName];
NSArray* arrPAAttributeNames = [dictPAAttributes allKeys];
for(NSString* strThisAttribute in arrPAAttributeNames) {
[newManagedObject setValue:[self.workingPA valueForKey:strThisAttribute] forKey:strThisAttribute];
}
我如何添加关系?我是否必须获取新创建的PA
实体,然后提取产品,从工作PA中提取NSSet
个产品,然后将它们添加到新的PA中?并且CUSTOMER
和SALES_REP
实体的流程是否相似?
答案 0 :(得分:1)
我想第一个问题是为什么要麻烦有一个workPA,为什么不让他们直接编辑newManagedObject。然后你只需要拨打[moc save]
。
但要创建创建新关系所需的关系,因为旧的关系位于workingPA对象和其他对象之间。
帮自己一个忙,从creating NSManagedObject
subclasses开始
PurchaseAgreement
Customer
Product
然后假设您拥有它们,您可能还需要创建另一个名为PAItem的对象来跟踪与PA关联的项目的详细信息(数量,成本等)
所以假设你有这个然后将项目添加到PA你会做这样的事情:
PurchaseAgreement * newPA = [NSEntityDescription
insertNewObjectForEntityForName:@"PurchaseAgreement"
inManagedObjectContext:_managedObjectContext];
newPA.customer = workingPA.customer;
newPA.attribute1 = workingPA.attribute1;
for (PAItem *item in workingPA.items) {
PAItem * newItem = [NSEntityDescription
insertNewObjectForEntityForName:@"PAItem"
inManagedObjectContext:_managedObjectContext];
newItem.purchaseAgreement = savingPA;
newItem.product = item.product;
newItem.quantity = item.quantity;
newItem.cost = item.cost;
. . .
}
NSError *error = nil;
if (![_managedObjectContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
// Take some action!
}