核心数据添加对象对多关系

Core Data add object to-many relationship

我正在尝试实现核心数据与两个实体的多对多关系 - WardrobeList 和 Items。 WardrobeList 具有一对多关系 "items",因此可以将多个项目添加到衣柜中。

我已经创建了 NSManagedObject 子类。这是他们的样子。

WardrobeList.h

@class Item;

@interface WardrobeList : NSManagedObject

@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) BabyDetails *babydetails;
@property (nonatomic, retain) NSSet *items;

@end

@interface WardrobeList (CoreDataGeneratedAccessors)

- (void)addItemObject:(Item *)value;
- (void)removeItemObject:(Item *)value;
- (void)addItem:(NSSet *)values;
- (void)removeItem:(NSSet *)values;

@end

Item.h

@class WardrobeList;

@interface Item : NSManagedObject

@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * brand;
@property (nonatomic, retain) NSString * color;
@property (nonatomic, retain) NSString * age;
@property (nonatomic, retain) NSDate * buydate;
@property (nonatomic, retain) NSNumber * quantity;
@property (nonatomic, retain) NSNumber * price;
@property (nonatomic, retain) NSData * image;
@property (nonatomic, retain) NSString * desc;
@property (nonatomic, retain) NSString * giftby;
@property (nonatomic, retain) NSString * category;
@property (nonatomic, retain) NSString * product;
@property (nonatomic, retain) WardrobeList *wardrobe;

@end

我有一个名为 WardrobeList 的 table 视图控制器,用于显示衣柜列表。我在这里有一个添加按钮,它将我带到添加项目视图控制器,用户可以在其中填充项目的详细信息。

我通过 segue 传递选定的衣橱对象。这是代码。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"AddItem"]) {
        //Assign managed objects to dest view controller
        AddItemViewController *destViewController = segue.destinationViewController;
        destViewController.wardrobe = wardrobe;
    } else if ([[segue identifier] isEqualToString:@"ShowItems"]) {
        ItemsList *destViewController = segue.destinationViewController;
        destViewController.wardrobe = wardrobe;
    }
}

在 AddItemVC.m 中,我捕获了用户输入的所有详细信息并将它们添加到新的项目管理对象中。然后我尝试在我的保存按钮方法中将这个 Item 对象添加到我从 segue 收到的衣柜中。

- (IBAction)save:(id)sender {
    NSManagedObjectContext *context = [self managedObjectContext];

    // Create a new item object
        Item *newItem = [NSEntityDescription insertNewObjectForEntityForName:@"Item" inManagedObjectContext:context];

        if (!product) {
            newItem.category = category;
            product = [products objectAtIndex:[self.pickerView selectedRowInComponent:1]];
            newItem.product = product;
        }

        //Saving the text fields
        newItem.name = self.itemTextField.text;
        newItem.brand = self.brandTextField.text;
        newItem.age = self.ageTextField.text;
        newItem.color = self.colorTextField.text;
        newItem.quantity = @([self.quantityTextField.text intValue]);
        newItem.price = @([self.priceTextField.text floatValue]);

        //Save date
        newItem.buydate = self.datePicker.date;

        //Save image
        newItem.image = imageData;

        //Save description
        newItem.desc = self.descTextField.text;

        //Save the gift field values
        if (self.giftTextField.text) {
            newItem.giftby = self.giftTextField.text;
        }

        //Manage the relation between wardrobe and item
        *[self.wardrobe addItemObject:newItem];*
        newItem.wardrobe = self.wardrobe;
        NSLog(@"Item saved");
    }

    NSError *error = nil;
    // Save the object to persistent store
    if (![context save:&error]) {
        NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
    }

    [self dismissViewControllerAnimated:YES completion:nil];
}

我在执行保存方法时收到此错误消息。

[WardrobeList addItemObject:]: unrecognized selector sent to instance 0x788d2880

有人可以指导我这里做错了什么以及如何纠正吗?

最终,一旦用户在 WardrobeList 中选择了特定衣橱,我想在新的 table 视图中显示所选衣橱中的所有物品。

非常感谢您的帮助。谢谢。

您的 CoreDataGeneratedAccessors 是自动生成的还是键入的?如果我有关系,即

@property (nonatomic, retain) NSSet *rooms;

我的代码是用项目名称而不是实体名称生成的

- (void)addRoomsObject:(Room *)value;

(认识 Rooms 中的 s)。如果不是这个,请查看您的模型(2 个实体之间的正确连接,模型和 class 中的相同命名)或查看是否有更多错误信息