【发布时间】:2010-11-26 03:51:52
【问题描述】:
我正在使用 Core Data 开发一个小型 iphone 应用程序,其中我有一个 Person 和一个 Image 实体。 Person 和 Image 之间的关系是对多的。一个人对许多图像。
问题发生在保存方法。在首先保存期间,我需要从 ImagePickerViewController 获得的多个图像数据“添加”到 Person,然后将 Person 实体“保存”到实际数据库。 ((用同样的方法))
if (managedObjectContext == nil)
{
managedObjectContext = [(CoreDataCombine01AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
}
//???: how to init _PersonImage?
_PersonImage = (PersonImage *)[NSEntityDescription insertNewObjectForEntityForName:@"PersonImage" inManagedObjectContext:managedObjectContext];
//_PersonImage = [_PersonImage init];
//_PersonImage = [[_PersonImage alloc] init];
_PersonImage.originalImage = imageData;
managedObjectContext = nil;
[managedObjectContext release];
.
if (managedObjectContext == nil)
{
managedObjectContext = [(CoreDataCombine01AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
}
person = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:managedObjectContext];
[person addPersonToPersonImageObject:_PersonImage];//runTime error
[_PersonImage release];
.
NSError *error = nil;
if (![person.managedObjectContext save:&error]) {
// Handle error
NSLog(@"Unresolved error at save %@, %@", error, [error userInfo]);
exit(-1); // Fail
}
然后我收到错误消息:
"-[NSConcreteMutableData CGImage]: unrecognized selector sent to instance"
和:
"*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSConcreteMutableData CGImage]: unrecognized selector sent to instance".
我猜这个错误来自 从一个 managedObjectContext 中双重使用 NSEntityDescription。所以我只是初始化了 Person 类,它自动从数据模型派生并手动导入,就像注释行一样,而不是使用 managedObjectContext。
它没有给出任何错误,但当我点击保存按钮时会出现运行时错误。
当我使用一对一关系时,保存没有问题,所以我猜对 Person 使用 managedObjectContext 是正确的方法。但是,一旦我使用多对多关系,我需要将图像数据保存到 PersonImage 实体。并且必须以某种方式初始化实体。
我错过了什么?
【问题讨论】:
标签: iphone core-data entity-relationship save one-to-many