防止重复核心数据 swift

Prevent for duplicates Core data swift

我想避免核心数据重复 swift。我觉得应该在应用程序内委托完成,但我不确定必须更改什么。

这是我添加新项目时的代码:

@IBAction func buttonClicked(_ sender: UIBarButtonItem) {
    let fetchRequest: NSFetchRequest<Bookmarks> = Bookmarks.fetchRequest()
    let bookmark = Bookmarks(context: context)
    if bookmarkButton.image == UIImage(systemName: "bookmark")  {
        bookmarkButton.image = UIImage(systemName: "bookmark.fill")
        bookmark.urlToImage = urlImage
        bookmark.source = sourceName
        bookmark.titleName = titleName
        bookmark.urlLink = url
        bookmarks.append(bookmark)

    } else {
        bookmarkButton.image = UIImage(systemName: "bookmark")
      
        if fetchRequest.predicate == NSPredicate.init(format: "titleName == %@", titleName!){
            print(bookmark)
            do {
                let objects = try context.fetch(fetchRequest)
                for object in objects {
                    context.delete(object)
                }
                try context.save()
            } catch _ {
                // error handling
            }
            
        }
       
    }
    
    do {
        try context.save()
    } catch {

    }
}

这是我的申请照片,有重复:

如果你知道如何解决这个问题,请帮助我 提前致谢

在插入新项目之前检查是否已经存在具有相同 titleName 的项目。如果不插入新项目。

像这样

@IBAction func buttonClicked(_ sender: UIBarButtonItem) {
    let fetchRequest: NSFetchRequest<Bookmarks> = Bookmarks.fetchRequest()
    fetchRequest.predicate = NSPredicate(format: "titleName == %@", titleName!)
    
    if (try? context.fetch(fetchRequest))?.first != nil {
        bookmarkButton.image = UIImage(systemName: "bookmark.fill")
    } else {
        let bookmark = Bookmarks(context: context)
        bookmarkButton.image = UIImage(systemName: "bookmark")
        bookmark.urlToImage = urlImage
        bookmark.source = sourceName
        bookmark.titleName = titleName
        bookmark.urlLink = url
        bookmarks.append(bookmark)
    
        do {
            try context.save()
        } catch {
            print(error)
        }
    }
}

如果商品无法通过标题唯一标识,请为谓词添加更多条件。