核心数据一对多关系:无法识别的选择器发送到实例

时间:2013-12-17 12:59:44

标签: ios objective-c core-data nsmanagedobject

我有两个类或对象:UserMedicine。这是我的User课程:

@interface User : NSManagedObject

@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSSet *medicine;
@end

@interface User (CoreDataGeneratedAccessors)

- (void)addMedicineObject:(Medicine *)value;
- (void)removeMedicineObject:(Medicine *)value;
- (void)addMedicine:(NSSet *)values;
- (void)removeMedicine:(NSSet *)values;
@end 

然后是Medicine

@interface Medicine : NSManagedObject

@property (nonatomic, retain) NSString * medName;
@property (nonatomic, retain) NSString * medType;
@property (nonatomic, retain) Dose *dose;
@property (nonatomic, retain) User *user;

@end

由于我的界面清楚地表明用户可能有多种药物。 (我来自数据库背景,这就是为什么我这样解释它。)

当我在User中添加新对象时,它很容易完成,但当我尝试为用户的现有对象添加新的Medicine时,我觉得我的Xcode有一个很强烈的愿望来拍我那时(反之亦然)。

现在这里是描述我在做什么的代码:

Medicine *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
User *user = [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:self.managedObjectContext];
if(![self checkUser])
{
    object.user = user;
    [user setName:self.userName];
    NSLog(@"%@ %@",object, user);
    self.detailViewController.detailItem = object;
}
else
{
    Medicine *medicine = [NSEntityDescription insertNewObjectForEntityForName:@"Medicine" inManagedObjectContext:self.managedObjectContext];
    user = [self getUser:self.userName];
    medicine.medName = object.medName;
    medicine.medType = object.medType;
    [medicine setUser:user];
    self.detailViewController.detailItem = medicine;
}

我有一个简单的逻辑:如果用户在文本字段中输入的名称已存在于DB中,则返回User对象。然后,只需为同一Medicine添加另一条User条记录。其他明智的方法是添加新的UserMedicine对象。

但我收到错误:

[medicine setUser:user];

我也试过这个:(因为我在像我这样的另一个问题中得到了它)

[user addMedicineObject:medicine];

现在我认为我必须覆盖addMedicineObject方法或其他方法。

哦,我忘记了错误。我得到这个错误:(真正的反派)

[__NSArrayM managedObjectContext]: unrecognized selector sent to instance 0x8136bf0

现在有什么建议吗?

1 个答案:

答案 0 :(得分:2)

这是因为你试图改变NSSet对象。在编辑之前,您需要创建一个可变副本。