2016-04-06 3 views
1

В моем проекте есть категория и объект рецептуры, который имеет отношение один к другому.Swift 2.1 Основные данные - Сохранение отношений создает пустую запись

Когда пользователь создает новый рецепт, выбор категории необязателен. Если не выбрано, для установления отношений с рецептом будет использоваться категория по умолчанию.

Когда createRecipe() уволен, он добавит правильное отношение категорий к сущности рецепта. Но проблема в том, что в объекте категории будет добавлена ​​пустая запись.

Я сделал, что оба changedCategory и defaultCategory не "" поэтому не знаю, почему я вижу эту "" добавляемые в категории сущности. Я проверяю ввод данных с помощью sqlitebrowser.

Как предотвратить добавление пустой записи в объект Category со следующим кодом?

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 
} 

ответ

1

В obtainCategoryEntity, вам необходимо установить category.name либо changedCategory или defaultCategory, если запрос выборки не находит существующую категорию с этим именем.

+0

Спасибо. У меня есть category.name = categoryEntity в Create(). Разве это не дубликат? –

+0

И не будет случая, когда запрос на выборку не находит существующую категорию. Я делаю эту проверку в диспетчере представления категорий, который я здесь не показывал. –

+0

Я замечаю, что вы ответили на мой предыдущий вопрос http://stackoverflow.com/questions/36346733/swift-2-1-core-data-save-data-that-has-one-to-many-relationship-but- Dont-добавить. С этого вопроса все немного изменилось, и я применил ваш код к диспетчеру категорий, где необходимо добавить новую категорию и повторить проверку. В рассматриваемом конструкторе CreateRecipe, упомянутом в этом вопросе, я просто получаю объект категории и назначаю отношения, но он неожиданно создает запись пустой категории. –

Смежные вопросы