我在尝试使用核心数据运行此应用时遇到错误。 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'to-many关系的值不可接受的类型:property =“ingredient”;期望的类型= NSSet;给定类型=成分;
我看到核心生成的访问器addIngredient:和removeIngredient:都将NSSet作为参数,所以我尝试将其更改为Ingredient,但这没有帮助。我怀疑虽然我更改了标题中的参数,但是在实现中有一些我看不到的东西?建议?
Recipe.h
@class IngredientList;
@interface Recipe : NSManagedObject
@property (nonatomic, retain) NSString * recipeName;
@property (nonatomic, retain) IngredientList *ingredientList;
@end
IngredientList.h
@class Ingredient, Recipe;
@interface IngredientList : NSManagedObject
@property (nonatomic, retain) Recipe *recipe;
@property (nonatomic, retain) NSSet *ingredient;
@end
@interface IngredientList (CoreDataGeneratedAccessors)
- (void)addIngredientObject:(Ingredient *)value;
- (void)removeIngredientObject:(Ingredient *)value;
- (void)addIngredient:(NSSet *)values;
- (void)removeIngredient:(NSSet *)values;
@end
Ingredient.h
@class IngredientList;
@interface Ingredient : NSManagedObject
@property (nonatomic, retain) NSString * ingredientName;
@property (nonatomic, retain) IngredientList *ingredientList;
@end
答案 0 :(得分:0)
如果我看到正确,那么ingredient
就是来自IngredientList
的多对多关系
到Ingredient
。 (备注:更好的名称是复数形式ingredients
。)
然后addIngredientObject:
,而不是addIngredient:
是添加成分的方法
到列表:
IngredientList *aList = ...;
Ingredient *anIngredient = ...;
[aList addIngredientObject:anIngredient];
或者,您可以设置反比关系:
anIngredient.ingredientList = aList;
方法addIngredient:
以NSSet
为参数,用于添加
一步到位的一整套对象。
核心数据访问器方法是在运行时动态生成的, 因此,您不能只更改生成的.h或.m文件。 如果模型已更改,您应该始终让Xcode重新生成文件。