下面的代码添加到核心数据问题中,但添加后,我无法保存,出现错误(乘法验证错误发生)我在核心数据收集中添加新数据后,无法保存(乘法验证错误发生)
MySQLIXC *ixcDatabase = [[MySQLIXC alloc] init];
NSArray *destinationsForSaleList = [ixcDatabase destinationsForSaleList:carrier];
NSFetchRequest *request1 = [[[NSFetchRequest alloc] init] autorelease];
[request1 setEntity:[NSEntityDescription entityForName:@"DestinationsList"
inManagedObjectContext:managedObjectContext]];
for (NSDictionary *destinationsForSale in destinationsForSaleList) {
NSManagedObject *object1 = [NSEntityDescription
insertNewObjectForEntityForName:@"DestinationsList"
inManagedObjectContext:managedObjectContext];
NSLog(@"Moc: %@",managedObjectContext);
[object1 setValue:@"y" forKey:@"weAreSoldIt"];
// changeDate
NSString *chdate = [destinationsForSale objectForKey:@"chdate"];
NSDateFormatter *changeDate = [[[NSDateFormatter alloc] init] autorelease];
[object1 setValue:[changeDate dateFromString:chdate] forKey:@"changeDate"];
NSLog(@"Carrier :%@ Destination name:%@",carrier, destinationsForSale);
//Country
[object1 setValue:[destinationsForSale objectForKey:@"country"] forKey:@"country"];
//rate
NSNumberFormatter *rate = [[[NSNumberFormatter alloc]init ]autorelease];
[object1 setValue:[rate numberFromString:[destinationsForSale objectForKey:@"price"]] forKey:@"rate"];
不幸的是,我不能通过你建议的方式修复bug。 Bcs Entity DestinationList必须通过项目理解与Entity Carriers建立关系。 这就是我尝试修复它:
[objectDestinationList setValue:objectCarrier forKey:@"carrier"];
我送到我的方法载体对象为对象,但它不工作。
在这种情况下,我不知道如何解决它。 Bcs我看到错误,但没有看到为什么错误是开始的情况。
你知道一个简单的代码来纠正与实体的关系吗?所有我在互联网上捕捉到的都是一本核心数据手册,我的Marcus Zarra和他很难理解的例子。他展示了一个复杂的解决方案,我可以理解它,但是使用编程风格在这个时刻对我来说不是那么容易(根据我在可可编程方面的一个月的经验;)
这里是附加信息:我如何创建Carrier实例。我有ManageObjectContext,我从AppDelegate上课。
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:[NSEntityDescription entityForName:@"Carrier"
inManagedObjectContext:managedObjectContext]];
NSManagedObject *carrier = [managedObjectContext executeFetchRequest:request error:&error]
以同样的方式我准备NSManagedObject for DestinationsList实体。
之后,我添加所有值到NSManagedObject的destinationsList,我必须做Carrer NSManagedObject和destinationsList之间的关系。在这种情况下,我有麻烦。贝娄是我尝试更新运营商实体关系:
NSSet *newDestSet = [NSSet setWithObjects:objectDestination,nil];
[objectCarrier setValue:newDestSet forKey:@"destinationsList"];
终于我有21 2010-11-03:22:56.968雪[20301:A0F] - [NSCFArray初始化]:无法识别的选择发送到实例0x1c44e40
贝娄是我的类接口deescription:
@interface InitUpdateIXC : NSObject {
NSInteger destinationType;
}
-(void) updateCarrierList:(NSManagedObjectContext *)managedObjectContext;
-(void)updateDestinationList:(NSManagedObjectContext *)managedObjectContext
forCarrier:(NSString *)carrierName
forCarrierObject:(NSManagedObject *)objectCarrier
destinationType:(NSInteger)destinationType;
@end
没错,波纹管在回答当前正确的模式,但有些不同的是,在这里。 起初,我没有单独的实体类,因为你出现在你的模型中。我的当前类只是NSManagedObject 第二,关系“carrier”对于Entity DestinationsList是非可选的。
解决方案与错误描述:
在故障情况下,有什么我的代码发生了: 当我尝试添加的setValue forKey从DestinationsList到托架放回关系,我忘了,NSManagmentObject返回每次阵列,而不仅仅是对象。 这是我收到有关阵列初始化问题的错误的原因。
解决方案不发送Carrier对象的方法,对于我来说bcs太难以从数组中提取没有键值的正确对象。我正在使用谓词访问来提取对象的数组和lastObject函数从数组中提取正确的对象。之后,我设置accroding价值和一切工作正常。 一个解决方案看起来不像可可风格,所以更好的方法是在未来重构它,任何建议的欢迎。 下面是相应的代码:
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:[NSEntityDescription entityForName:@"Carrier"
inManagedObjectContext:managedObjectContext]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name =%@",carrierName];
[request setPredicate:predicate];
NSError *error = nil;
NSArray *currentCarriers = [managedObjectContext executeFetchRequest:request error:&error];
[objectDestination setValue:[currentCarriers lastObject] forKey:@"carrier"];
感谢ü非常。 NSLocalizedDescription =“载体是必需的值”。看起来像当我添加具有反比关系的实体时,我也必须添加它。对于我来说,这是非可选的,以保护我在核心数据存储中未使用的数据。 – Alex 2010-11-02 10:53:04
如果我有关系命名承运人,如何我可以连接它从代码,如果我有实体承运人的名称属性? – Alex 2010-11-02 11:25:43
当我将对象载体添加到关系中时,我在保存中看到了最终错误:2 - [NSAlert alertWithError:]用nil NSError调用。一般的错误信息会显示出来,但用户应该更好。操作无法完成。没有关于此问题的其他信息。但在这个时候,我没有看到任何麻烦,核心数据保存以及数据库。 – Alex 2010-11-02 14:54:44