首先,您必须遗漏一些生成的代码,因为在 Hobby 类中应该有一个反向关系返回给用户。我想 Hobby -> User 关系也是对多的,因为我确信“观鸟”的爱好会有多个用户。
如果您的代码不包含该关系,那么您的模型实际上可能不包含反向关系。
此外,对多关系使用复数形式更为常见,这意味着您可能需要考虑将您的关系重命名为“爱好”。
您所要做的就是将“爱好”对象实例添加到给定“用户”的“爱好”关系中。无需更改这两种关系,因为核心数据会建立反向关系。
这是一个完全未经测试的将 ObjC 转换为 swift 的尝试,但它应该足够接近爵士乐。
// Add 'hobby' to the set of hobbies for a given 'user'
// The inverse relationship (add 'user' to the set of users for a given 'hobby'
// will be automatically handled by core data
user.mutableSetValueForKey("hobby").addObject(hobby)
编辑
好的,所以我想我需要让当前用户添加到正确的用户。一世
我想使用这个代码 var curUser =
NSEntityDescription.insertNewObjectForEntityForName("用户",
inManagedObjectContext:上下文)作为!用户 curUser.hobby =
addHobbyTextField.text 为! NSSet 但不确定如何处理 NSSet。
有什么帮助吗? – 铃木杰克3
所以,看起来您正在创建一个新用户...
var curUser = NSEntityDescription.insertNewObjectForEntityForName(
"User",
inManagedObjectContext: context) as! Users
然而,第二部分有点混乱。这是你写的……
curUser.hobby = addHobbyTextField.text as! NSSet
我承认我对 swift 的了解为零,但这看起来很奇怪。您正在尝试将字符串(文本字段内的值)转换为 NSSet?这永远行不通,也没有任何意义。
我猜那个文本字段中的内容是一个爱好的名称,可能类似于“阅读”,也许您想添加“阅读”作为新用户的爱好。
如果是这种情况,那么您需要根据爱好名称获取爱好对象,然后将该爱好添加到给定用户的爱好集合中。
现在,我将放弃 swift 的任何伪装并在 ObjC 中回答,因为我想你作为 swift 程序员可以比我更好地将我在这里写的内容移植到适当的 swift 中,这似乎更像是一个如何使用核心数据而不是 swift 语法之一(此外,您可能不想仅仅忽略 fetch 中可能出现的错误)。
// Fetch the appropriate hobby object
NSString *hobbyName = addHobbyTextField.text;
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Hobby"];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"name = %@", hobbyName];
fetchRequest.fetchLimit = 1;
Hobby *hobby = [[moc executeFetchRequest:fetchRequest error:NULL] firstObject];
// Add the hobby to the set of hobbies for this user
if (hobby) {
[[user mutableSetValueForKey:@"hobby"] addObject:hobby];
}