如何快速从核心数据中删除对象

时间:2019-07-08 14:30:51

标签: swift core-data

我正在学习快速,并且尝试从CoreData删除对象时遇到问题

我的应用程序有两页,一页是搜索(用于搜索食谱),另一页是收藏夹页面(我在其中放置自己喜欢的食谱)

当我在搜索页面中转到食谱的详细信息时,便可以向收藏夹中添加食谱或从中删除食谱(一切正常),但是当我不想从“收藏夹”页面中删除收藏夹时,应用程序崩溃,“在解开可选包时发现nil”

var storage = RecipeStorageManager()

var recipeDetail: Hit!

var recipe: RecipeToSave

var isFavorite: Bool {
    return storage.fetchAll().contains(where: { $0.url == self.recipeDetail.recipe.url })
}

let request: NSFetchRequest<RecipeToSave> = RecipeToSave.fetchRequest()



@objc func favTapped(_ sender: Any!) {
    if isFavorite == true {
        print("favvv")
        removeFromFav()
    } else {
        addToFav()
        navigationItem.rightBarButtonItem?.tintColor = .green
    }
}


func addToFav() {
    recipe = storage.insertRecipe(label: recipeDetail.recipe.label,
                             url: recipeDetail.recipe.url,
                             image: recipeDetail.recipe.image,
                             ingredientLines: recipeDirections.text,
                             totalTime: recipeDetail.recipe.totalTime)
    print("added fav")

    storage.save()
}


func removeFromFav() {
    storage.remove(recipeID: recipe.objectID)
    print("removed")
    storage.save()
    navigationController?.popViewController(animated: true)
}

1 个答案:

答案 0 :(得分:0)

你在说

var recipeDetail: Hit!
var isFavorite: Bool {
    return storage.fetchAll().contains(where: { $0.url == self.recipeDetail.recipe.url })
}

因此,每当您在代码中说出recipeDetailisFavorite时,如果recipeDetailnil,您就会崩溃。