如何检查核心数据是否为空

Ahm*_* R. 5 core-data swift

如何使用swift检查核心数据是否为空.我试过这个方法:

var people = [NSManagedObject]()

if people == nil {

}
Run Code Online (Sandbox Code Playgroud)

但这会导致此错误

"binary operator'=='不能应用于[NSManagedObject]和nil类型的操作数"

Mao*_*aor 9

Swift 3解决方案:

var isEmpty: Bool {
    do {
        let request = NSFetchRequest(entityName: YOUR_ENTITY)
        let count  = try context.count(for: request)
        return count == 0
    } catch {
        return true
    }
}
Run Code Online (Sandbox Code Playgroud)


Her*_*ker 6

根据 Dejan Skledar 的回答,我摆脱了一些编译器警告并将其应用于 Swift 2.0。

func entityIsEmpty(entity: String) -> Bool
{

    let context = NSManagedObjectContext()
    let request = NSFetchRequest(entityName: entity)
    var results : NSArray?

    do {
        results = try context.executeFetchRequest(request) as! [NSManagedObject]

        return results.count == 0

    } catch let error as NSError {
        // failure
        print("Error: \(error.debugDescription)")
        return true
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我不确定是否需要该if let res=results条款及其else条款。


Dej*_*dar 5

要检查核心数据库是否为空,您必须NSFetchRequest在要检查的实体上打一个勾,并检查请求的结果是否为空。

您可以使用以下功能进行检查:

func entityIsEmpty(entity: String) -> Bool
{

    var appDel:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    var context = NSManagedObjectContext()

    var request = NSFetchRequest(entityName: entity)
    var error = NSErrorPointer()

    var results:NSArray? = self.context.executeFetchRequest(request, error: error)

    if let res = results
    {
        if res.count == 0
        {
            return true
        }
        else
        {
            return false
        }
    }
    else
    {
        println("Error: \(error.debugDescription)")
        return true
    }

}
Run Code Online (Sandbox Code Playgroud)

或更简单或更短的解决方案:(使用.countForFetchRequest

func entityIsEmpty(entity: String) -> Bool
{

    var appDel:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    var context = NSManagedObjectContext()

    var request = NSFetchRequest(entityName: entity)
    var error = NSErrorPointer()

    var results:NSArray? = self.context.executeFetchRequest(request, error: error)

    var count = context.countForFetchRequest(request, error: error)

    if error != nil
    {
        println("Error: \(error.debugDescription)")
        return true
    }
    else
    {
        if count == 0
        {
            return true
        }
        else
        {
            return false
        }

    }


}
Run Code Online (Sandbox Code Playgroud)

  • 如果您只想检查实体的任何对象是否存在(实际上没有获取它们),则使用`countForFetchRequest`效率更高,请比较http://stackoverflow.com/questions/20794757/check-if-name-attribute -已经存在于核心数据中。 (2认同)