如何使用swift检查核心数据是否为空。我试过这个方法:
var people = [NSManagedObject]()
if people == nil {
}
但这会导致此错误
“二元运算符'=='不能应用于[NSManagedObject]类型的操作数和nil”
答案 0 :(得分:9)
Swift 3解决方案:
var isEmpty : Bool {
do{
let request = NSFetchRequest(entityName: YOUR_ENTITY)
let count = try context.count(for: request)
return count == 0 ? true : false
}catch{
return true
}
}
答案 1 :(得分:4)
要检查核心数据库是否为空,您必须在要检查的实体上设置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
}
}
或更简单,更短的解决方案:(使用.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
}
}
}
答案 2 :(得分:4)
根据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
}
}
但是,我不确定是否需要if let res=results
子句及其else
子句。
答案 3 :(得分:1)
SwiftUI解决方案
struct ContentView: View {
@Environment(\.managedObjectContext) private var viewContext
@FetchRequest(
sortDescriptors: [NSSortDescriptor(keyPath: \MyObject.created, ascending: true)],
animation: .default)
private var myobjects: FetchedResults<MyObject>
var body: some View {
if self.myobjects.isEmpty{
Text("There are no objects in the current database.")
}
else{
// whatever
}
}
}