Coredata返回重复值。谁能有同样的问题?

时间:2017-09-15 09:18:44

标签: core-data swift3

我正在使用swift3。从coredata获取数据时,它返回重复值。使用软件Datum,我知道数据库只包含原始值。     class DatabaseManager:NSObject {

fileprivate static let sharedManager: DatabaseManager = DatabaseManager()
class var shared: DatabaseManager {
    return sharedManager
}

/*Returns the ManagedObjectContext*/
var managedObjectContext: NSManagedObjectContext!
var privateManagedObjectContext: NSManagedObjectContext!

fileprivate var completionHandler: ((_ completed: Bool)-> Void)? = nil


override init() {
    privateManagedObjectContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
    if let appdelegate = UIApplication.shared.delegate as? AppDelegate {
        managedObjectContext = appdelegate.managedObjectContext
        privateManagedObjectContext.persistentStoreCoordinator = managedObjectContext.persistentStoreCoordinator
    }
}

deinit {
   managedObjectContext = nil
    privateManagedObjectContext = nil
}

}

//获取数据

func getItem()->[ListItem]{

    var objects = [ListItem]()
    var uniqueObjects:[ListItem] = [ListItem]()
    let sort = NSSortDescriptor(key: "itemName", ascending: false)
    let request : NSFetchRequest<ShoppyListItem> = ShoppyListItem.fetchRequest() as NSFetchRequest<ShoppyListItem>
    //let predicate = NSPredicate(format:"excludedIDContain = %@","New")
   // request.predicate = predicate
    request.sortDescriptors = [sort]
    do {
        if objects.count > 0 {
            objects.removeAll()
        }
        objects =  try managedObjectContext?.fetch(request) ?? []
        return objects


    } catch {
        print("Error with request: \(error)")
    }
    return objects
}

// objects = try managedObjectContext?.fetch(request)?? []返回重复的对象

1 个答案:

答案 0 :(得分:0)

我明白了。我没有弄错伯爵。这是由于并发性。我没有在coredata的安全线程上运行fetch。我所要做的就是把代码放在执行块中。 managedObjectContext.perform(块)。 从stanford ios教程得到这个名为coredata demo。视频时间26:00。教授解释了这一点。