如何检查核心数据 class 是否为零。在 SWIFT
How do I check if core data class is nil. in SWIFT
我创建了一个名为 Status
的实体,其属性名为 statusUpdate
。我希望用户能够第一次创建状态,然后将其保存在核心数据中,然后在下次更新状态时保存核心数据中的旧状态。这是我所做的:
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let context: NSManagedObjectContext = appDel.managedObjectContext!
let newUser = NSEntityDescription.insertNewObjectForEntityForName("Status", inManagedObjectContext: context) as NSManagedObject
var request = NSFetchRequest(entityName: "Status")
request.returnsObjectsAsFaults = false
var results = context.executeFetchRequest(request, error: &self.error)
if results?.count > 0 {
for result: AnyObject in results! {
if var oldStatus = result.valueForKey("statusUpdate") as? String {
println("Current User fetched status from Core Data")
var newStatus = self.updateStatusText.text
result.setValue(newStatus, forKey: "statusUpdate")
} else if result.valueForKey("statusUpdate") == nil {
var newStatus = self.updateStatusText.text
newUser.setValue(newStatus, forKey: "statusUpdate")
println("Status uploaded for the first time")
}
}
}
context.save(&self.error)
问题是 else if
似乎总是 运行。我希望它基本上只有 Status
实体的 运行 是零(所以它只会 运行 第一次有人更新状态)然后当状态更新时它运行 只是常规的 if
语句。
我不确定我做错了什么???
提前致谢。
if (var oldStatus = result.valueForKey("statusUpdate") as? String) != nil{
println("Current User fetched status from Core Data")
var newStatus = self.updateStatusText.text
result.setValue(newStatus, forKey: "statusUpdate")
}else {
var newStatus = self.updateStatusText.text
newUser.setValue(newStatus, forKey: "statusUpdate")
println("Status uploaded for the first time")
}
代码的第 3 行插入了一个新的 Status
对象,因此每次执行此代码时,您都会添加一个额外的对象。新插入的对象的 statusUpdate
为 nil(最有可能)。
当您执行提取时,在第 6 行,这个新的 Status
对象将与您之前保存的任何对象一起包含在 results
中。因此,当您遍历所有 results
时,总会有一个 statusUpdate
为零。
我会重组您的代码以首先进行提取,确定是否有任何结果。如果是这样,请更新 statusUpdate
;如果不是,则创建新对象并设置 statusUpdate
字段。像这样:
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let context: NSManagedObjectContext = appDel.managedObjectContext!
var request = NSFetchRequest(entityName: "Status")
request.returnsObjectsAsFaults = false
var results = context.executeFetchRequest(request, error: &self.error)
if let resultsArray = results { // explicitly test for nil results
if resultsArray.count > 0 {
// count should be at most one, but just in case we will iterate through:
for result: AnyObject in resultsArray {
println("Current User fetched status from Core Data")
var newStatus = self.updateStatusText.text
result.setValue(newStatus, forKey: "statusUpdate")
}
else { // resultsArray is empty, so insert a new object
var newStatus = self.updateStatusText.text
let newUser = NSEntityDescription.insertNewObjectForEntityForName("Status", inManagedObjectContext: context) as NSManagedObject
newUser.setValue(newStatus, forKey: "statusUpdate")
println("Status uploaded for the first time")
}
} else { // fetch returned nil, so log an error:
println("Nil returned by fetch")
}
context.save(&self.error)
我创建了一个名为 Status
的实体,其属性名为 statusUpdate
。我希望用户能够第一次创建状态,然后将其保存在核心数据中,然后在下次更新状态时保存核心数据中的旧状态。这是我所做的:
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let context: NSManagedObjectContext = appDel.managedObjectContext!
let newUser = NSEntityDescription.insertNewObjectForEntityForName("Status", inManagedObjectContext: context) as NSManagedObject
var request = NSFetchRequest(entityName: "Status")
request.returnsObjectsAsFaults = false
var results = context.executeFetchRequest(request, error: &self.error)
if results?.count > 0 {
for result: AnyObject in results! {
if var oldStatus = result.valueForKey("statusUpdate") as? String {
println("Current User fetched status from Core Data")
var newStatus = self.updateStatusText.text
result.setValue(newStatus, forKey: "statusUpdate")
} else if result.valueForKey("statusUpdate") == nil {
var newStatus = self.updateStatusText.text
newUser.setValue(newStatus, forKey: "statusUpdate")
println("Status uploaded for the first time")
}
}
}
context.save(&self.error)
问题是 else if
似乎总是 运行。我希望它基本上只有 Status
实体的 运行 是零(所以它只会 运行 第一次有人更新状态)然后当状态更新时它运行 只是常规的 if
语句。
我不确定我做错了什么???
提前致谢。
if (var oldStatus = result.valueForKey("statusUpdate") as? String) != nil{
println("Current User fetched status from Core Data")
var newStatus = self.updateStatusText.text
result.setValue(newStatus, forKey: "statusUpdate")
}else {
var newStatus = self.updateStatusText.text
newUser.setValue(newStatus, forKey: "statusUpdate")
println("Status uploaded for the first time")
}
代码的第 3 行插入了一个新的 Status
对象,因此每次执行此代码时,您都会添加一个额外的对象。新插入的对象的 statusUpdate
为 nil(最有可能)。
当您执行提取时,在第 6 行,这个新的 Status
对象将与您之前保存的任何对象一起包含在 results
中。因此,当您遍历所有 results
时,总会有一个 statusUpdate
为零。
我会重组您的代码以首先进行提取,确定是否有任何结果。如果是这样,请更新 statusUpdate
;如果不是,则创建新对象并设置 statusUpdate
字段。像这样:
let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let context: NSManagedObjectContext = appDel.managedObjectContext!
var request = NSFetchRequest(entityName: "Status")
request.returnsObjectsAsFaults = false
var results = context.executeFetchRequest(request, error: &self.error)
if let resultsArray = results { // explicitly test for nil results
if resultsArray.count > 0 {
// count should be at most one, but just in case we will iterate through:
for result: AnyObject in resultsArray {
println("Current User fetched status from Core Data")
var newStatus = self.updateStatusText.text
result.setValue(newStatus, forKey: "statusUpdate")
}
else { // resultsArray is empty, so insert a new object
var newStatus = self.updateStatusText.text
let newUser = NSEntityDescription.insertNewObjectForEntityForName("Status", inManagedObjectContext: context) as NSManagedObject
newUser.setValue(newStatus, forKey: "statusUpdate")
println("Status uploaded for the first time")
}
} else { // fetch returned nil, so log an error:
println("Nil returned by fetch")
}
context.save(&self.error)