我正在嘗試與兩個實體 - WardrobeList和Items實現核心數據對多關係。 WardrobeList有一個多對多的關係「物品」,這樣就可以將多個物品添加到衣櫃中。核心數據添加對象對多關係
我已經創建了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其中I顯示衣櫃的列表表格視圖控制器。我在這裏有一個Add按鈕,它將我帶到添加項目視圖控制器,其中用戶填充項目的詳細信息。
我通過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中選擇了一個特定的衣櫥,我最終希望在新的表格視圖中顯示所選衣櫥中的所有物品。
您的幫助將不勝感激。謝謝。
我的CoreDataGeneratedAccessors類型爲我添加了多對多關係在我生成子類之後。我將用附加的's'更新我的子類,並嘗試再次運行它。我會告訴你,謝謝! – Maldus 2015-02-11 05:55:46
在將's'添加到我的CoreDataGeneratedAccessors後,我能夠保存該項目。沒有意識到這種微不足道的事情可能會導致問題。感謝你的幫助! – Maldus 2015-02-11 07:23:43