2015-02-09 68 views
2

我正在嘗試與兩個實體 - 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中選擇了一個特定的衣櫥,我最終希望在新的表格視圖中顯示所選衣櫥中的所有物品。

您的幫助將不勝感激。謝謝。

回答

0

您的CoreDataGeneratedAccessors是自動生成還是輸入?如果我有關係,即

@property (nonatomic, retain) NSSet *rooms;

我的代碼與項目名稱產生的,而不是實體名稱

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

(識別S IN客房)。如果不是這樣,看看你的模型(兩個實體之間的正確連接,模型和類中的相同命名),或者看看是否有更多的錯誤信息

+0

我的CoreDataGeneratedAccessors類型爲我添加了多對多關係在我生成子類之後。我將用附加的's'更新我的子類,並嘗試再次運行它。我會告訴你,謝謝! – Maldus 2015-02-11 05:55:46

+0

在將's'添加到我的CoreDataGeneratedAccessors後,我能夠保存該項目。沒有意識到這種微不足道的事情可能會導致問題。感謝你的幫助! – Maldus 2015-02-11 07:23:43