Ios Swift 2.1核心数据-保存关系创建空记录
我的项目有类别和配方实体,它们有一对多的关系 当用户创建新配方时,选择类别是可选的。 如果未选中,将使用默认类别与配方建立关系 当激发Ios Swift 2.1核心数据-保存关系创建空记录,ios,swift,core-data,Ios,Swift,Core Data,我的项目有类别和配方实体,它们有一对多的关系 当用户创建新配方时,选择类别是可选的。 如果未选中,将使用默认类别与配方建立关系 当激发createRecipe()时,它将向配方实体添加正确的类别关系。但问题是,类别实体中会添加一条空记录 我确保changedCategory和defaultCategory都不是“”,所以我不确定为什么在类别实体中添加了这个”。 我正在用sqlitebrowser检查数据输入 如何防止使用以下代码将en空记录添加到类别实体 func createRecipe(se
createRecipe()
时,它将向配方实体添加正确的类别关系。但问题是,类别实体中会添加一条空记录
我确保changedCategory
和defaultCategory
都不是“
”,所以我不确定为什么在类别实体中添加了这个”
。
我正在用sqlitebrowser检查数据输入
如何防止使用以下代码将en空记录添加到类别实体
func createRecipe(sender: AnyObject!) {
if let title = recipeTitle.text where title != "" {
let category = obtainCategoryEntity(changedCategory, defaultCategory: defaultCategory, context: self.context)
let recipe = (NSEntityDescription.insertNewObjectForEntityForName("Recipe", inManagedObjectContext: self.context) as! Recipe)
recipe.category = category
recipe.title = title
...
do {
try self.context.save()
} catch {
print("Could not save recipe")
}
}
}
func obtainCategoryEntity(changedCategory: String, defaultCategory: String, context: NSManagedObjectContext) -> RecipeCategory {
var category = NSEntityDescription.insertNewObjectForEntityForName("RecipeCategory", inManagedObjectContext: self.context) as! RecipeCategory
let fetchRequest = NSFetchRequest(entityName: "RecipeCategory")
if changedCategory != "" {
fetchRequest.predicate = NSPredicate(format: "name == %@", changedCategory)
} else {
fetchRequest.predicate = NSPredicate(format: "name == %@", defaultCategory)
}
if let results = (try? context.executeFetchRequest(fetchRequest)) as? [RecipeCategory] {
if results.count > 0 {
category = results[0]
}
}
return category
}
在获取类别实体中,如果提取请求找不到具有该名称的现有类别,则需要将category.name设置为changedCategory或defaultCategory。谢谢。我在Create()中有category.name=categoryEntity。它不会是重复的吗?而且不会出现获取请求找不到现有类别的情况。我在这里没有显示的类别viewcontroller中进行检查。我注意到您已经回答了我前面的问题。从那个问题开始,情况发生了一点变化,我将您的代码应用到Category viewcontroller,其中需要添加新的类别和重复检查。在本问题中提到的CreateRecipe viewcontroller中,我仅获取类别实体和分配关系,但它意外地创建了一个空类别记录。如前所述,获取类别实体总是插入一个新的类别实体。这就是NSEntityDescription.insertNewObjectForEntityForName所做的。并且它将始终为空,因为您在插入category.name后未设置它。如果您打算检索一个现有类别,并且您确信它将始终存在,那么您应该编写一个不同的函数,该函数不调用insertNewObjectForEntityForName。在我发布的原始代码中,插入类别的调用是在获取之后进行的。您在提取之前移动了它,这就是为什么总是创建一个。