- 我的数据模型中有一个车辆实体。
- 它具有名称、品牌、型号等属性。
- 我对 NewVehicleViewController 有一个模态 segue,它允许用户输入实体信息。
- 在这个 segue 期间,我已将 managedObjectContext 传递给 NewVehicleViewController
单击“完成”,通过在 NewVehicleViewController 的 IBAction 方法中调用 create+vehicle.m 方法来创建一个新的 NSEntityDescription。
Vehicle *car = [Vehicle vehicleWithName:name inManagedObjectContext:self.context];
此方法执行以下操作:
+ (Vehicle *) vehicleWithName:(NSString *)name inManagedObjectContext:(NSManagedObjectContext *) context
{
Vehicle *vehicle = nil;
//check for duplicates
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Vehicle"];
request.predicate = [NSPredicate predicateWithFormat:@"name = %@", name];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSError *error;
NSArray *matches = [context executeFetchRequest:request error:&error];
NSLog(@"Matches: %d", matches.count);
if(!matches || [matches count] >1){
//nil or more than 1
} else if ([matches count] == 0){
//not found
vehicle = [NSEntityDescription insertNewObjectForEntityForName:@"Vehicle" inManagedObjectContext:context];
vehicle.name = name;
}else{
vehicle = [matches lastObject];
NSLog(@"vehicle already exists with name: %@", name);
}
NSLog(@"Created vehicle with name: %@", vehicle.name);
return vehicle;
}
当窗口关闭时,我返回到我的 Table View 控制器,我可以在其中看到新元素。(此表链接到 fetch 语句)。一切都很好。
然后大约 4-6 秒后,我抛出了一个异常。底部的调试日志什么也没显示,它把我带到了一个线程 8 视图,第一行有一个中断。
libobjc.A.dylib`objc_exception_throw:
0x1780caa: pushl %ebp
0x1780cab: movl %esp, %ebp
0x1780cad: pushl %ebx
0x1780cae: pushl %edi
0x1780caf: pushl %esi
0x1780cb0: subl $2028, %esp
0x1780cb6: calll 0x01780cbb ; objc_exception_throw + 17
所以我的第一个问题是,知道问题是什么吗?这是由于 NS Core Data 的自动保存在一段时间后发生的吗?
我的第二个问题是,我怎样才能进一步调试它以找出问题所在?
谢谢!