我有一个GameData实体,用于存储字符串数组。所以我创建了一个'Value'实体,它有一个值字符串属性,并在两个实体之间建立了多对多的关系。
要保存数据,请使用以下代码:
//Save values
NSMutableSet* values = [[NSMutableSet alloc] init];
for(NSString* n in gameData.values){
NSManagedObject *val = [NSEntityDescription
insertNewObjectForEntityForName:@"Value"
inManagedObjectContext:context];
[val setValue:n forKey:@"value"];
[values addObject:val];
}
[gd setValue:values forKey:@"values"];
gameData.values数组当前是空的,因此代码实际上从未进入for循环...但由于某种原因,它在此行[gd setValue:values forKey:@"values"]
崩溃并出现以下错误。
-[__NSSetM managedObjectContext]: unrecognized selector sent to instance 0x1f0485d0
我在哪里或如何将managedObjectContext
选择器发送到我的值NSMutableSet ??
答案 0 :(得分:1)
也许您需要检查您的实体的类型是否为#34; To Many"。
答案 1 :(得分:0)
我无法评论,这就是为什么我要创建一个答案。
为什么不使用xcode为您的实体创建子类并导入其头文件并使用如下代码
//Save values
//NSMutableSet* values = [[NSMutableSet alloc] init]; -- No Need of this
for(NSString* n in gameData.values){
Value *val = [NSEntityDescription
insertNewObjectForEntityForName:@"Value"
inManagedObjectContext:context];
[val setValue:n]; // set your string
[val setGame:gd]; // set the game relation here. you can do this, if you have
配置反向关系。如果没有创建反向关系,那将会有所帮助。
}
//[gd setValue:values forKey:@"values"]; you don't need this.
现在只需保存上下文。一切都应该没问题。这比你的方式更清洁。我从来没有使用键值来访问核心数据实体属性,因为它必须记住属性的确切拼写会让人感到困惑和容易出错,如果你使用了错误的拼写或错误的键,它就不会抛出任何错误。
我认为你应该看看core data programming guide
编辑:如果您的GameEntity存储字符串数组,那么一对多的关系就足够了。只有当GameEntity有很多字符串和每个字符串,即Value实体也有许多GameEntity时,你需要多对多。在这种情况下,上面的代码稍有变化。
而不是
[val setGame:gd];
您需要使用
[val addGameObject:gd];