我一遍又一遍地讨论这个问题,我一生都无法弄清楚为什么通过 setValue:forKey: 分配关系不起作用。我的方法如下。
-(void)saveNewCartItemName:(NSString *)name Price:(float)price Qty:(int)qty Tax:(int)tax inCart:(NSDate *)cartDate{
NSManagedObject *newItem = [NSEntityDescription insertNewObjectForEntityForName:@"Item"
inManagedObjectContext:self.appDelegate.managedObjectContext];
NSFetchRequest *query = [[NSFetchRequest alloc] initWithEntityName:@"Cart"];
NSLog(@"cartDate = %@", cartDate);
[query setPredicate:[NSPredicate predicateWithFormat:@"cartDate = %@", cartDate]];
NSError *error;
NSMutableArray *queryResults = [[self.appDelegate.managedObjectContext executeFetchRequest:query error:&error] mutableCopy];
NSLog(@"queryResults count = %d", [queryResults count]);
if ([queryResults count] == 1) [newItem setValue:[queryResults objectAtIndex:0] forKey:@"cartThatHasItem"];
[newItem setValue:name forKey:@"itemName"];
[newItem setValue:[NSNumber numberWithFloat:price] forKey:@"itemPrice"];
[newItem setValue:[NSNumber numberWithInt:qty] forKey:@"itemQty"];
[newItem setValue:[NSNumber numberWithInt:tax] forKey:@"itemTax"];
[self.appDelegate.managedObjectContext save:&error];
}
它每次崩溃的行是:
if ([queryResults count] == 1) [newItem setValue:[queryResults objectAtIndex:0] forKey:@"cartThatHasItem"];
我的 NSLog 显示有一个 NSManagedObject 可以分配关系,并且我仔细检查了 forKey 中的名称:没有拼写错误。Xcode 告诉我的只是它在我的控制台上打印出“(null)”,然后在下一行告诉我“libc++abi.dylib: terminate called throwing an exception”。
为什么会崩溃?我该如何解决?
更新:这是整个错误信息。
2012-07-03 18:28:57.844 appName[3063:11603] (null)
libc++abi.dylib: terminate called throwing an exception
(lldb)