ios - 删除核心数据中的重复对象(快速)

标签 ios swift

我将对象保存到 JSON 的核心数据中,我使用 for 循环(假设我调用了这个 setup 函数。 因为用户可能会停止这个循环,所以保存在核心数据中的对象将是部分的。用户可以重新启动此设置函数,重新启动解析和将对象保存到核心数据的过程。

现在,如果我重新启动 setup(),我会在核心数据中得到重复的对象。 该对象具有一个属性,即 id

我想我可以获取第一个最终可能已经存在于核心数据中的对象,将它们保存到一个数组(一个自定义类型的数组)中,并测试每个新对象添加到核心数据中(如果已经存在)相同的 id。 使用的代码如下:

if !existingCards.isEmpty {
    for existingCard in existingCards {
        if id == existingCard.id {
           moc.deleteObject(existingCard)
           println("DELETED \(existingCard.name)")
        }
    }
}

...
// "existingCards is the array of object fetched previously.
// Code to save the object to core data.

实际上,应用返回

EXC_BAD_ACCESS(code=1, address Ox0)

是否有更简单的方法来实现我的目的,或者我应该修复什么才能使我的代码正常工作?我对 swift 还很陌生,想不出其他解决方案。 顺便说一句,主要目的是删除重复的核心数据。

最佳答案

Swift 4 删除重复对象的代码:

let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Card")
var resultsArr:[Card] = []
do {
    resultsArr = try (mainManagedObjectContext!.fetch(fetchRequest) as! [Card])
} catch {
    let fetchError = error as NSError
    print(fetchError)
}
        
if resultsArr.count > 0 {
    for x in resultsArr {
        if x.id == id {
            print("already exist")
            mainManagedObjectContext.deleteObject(x)
        }
    }
}

关于ios - 删除核心数据中的重复对象(快速),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30334670/

相关文章:

iphone - 在应用程序中将下载的图像存储在哪里?

在 textview 或标签周围快速绘制边框

UINavigationBar 中的 iOS 11 UISearchBar

ios - 推迟来自 App Store 的促销 IAP 请求时显示提醒

swift - 快速将原始图像数据转换为 jpeg

ios - 如何使用 Scroll TransitionStyle 阻止 UIPageViewController 上的点击手势

ios - 如何在 Swift 中获取 UIStoryboard 数组?

android - Delphi XE7 TBannerAd 未在 Android 上显示广告

ios - fatal error 索引超出范围 swift 3 SpriteKit

ios - 在 Swift 中完成下载后设置文件名