gpt4 book ai didi

ios - 使用 NSPredicate 将对象保存到核心数据

转载 作者:行者123 更新时间:2023-11-30 13:57:17 24 4
gpt4 key购买 nike

我正在尝试将一个对象保存到从 Parse 获取的核心数据中,但我只想要那些不包含数据库中已存在名称的对象:

func fetchFromParse() {

let entity = NSEntityDescription.entityForName("Medicine", inManagedObjectContext: context)
let query = PFQuery(className: "Medicine")
query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if error == nil {
for object in objects! {
let medicine = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: self.context)

if let name = object["medicineName"] as? String,
amount = object["amountQuantity"] as? String {

let predicate = NSPredicate(format: "name != %@", name)
self.fetchRequest.predicate = predicate

do{
let fetchedEntities = try self.context.executeFetchRequest(self.fetchRequest) as! [Medicine]
//save to Core Data


medicine.setValue(name, forKey: "name")
medicine.setValue(amount, forKey: "amount")

} catch let error as NSError{
print(error)
}

do {
try self.context.save()
self.tableView.reloadData()
} catch let error as NSError {
print("Could not save \(error), \(error.userInfo)")
}
}
}
}
}
}

从核心数据中获取数据

func fetchFromCoreData() {

do {
let results = try context.executeFetchRequest(fetchRequest)
medicines = results as! [Medicine]
} catch let error as NSError {
print("Could not fetch \(error), \(error.userInfo)")
}


}

我把它放在viewWillAppear中:

if Reachability.isConnectedToNetwork() {
//fetching data from Parse

fetchFromParse()
fetchFromCoreData()
tableView.reloadData()

} else {
//fetching data from Core data
fetchFromCoreData()
logOutButton.enabled = false

}

但是这不起作用。有什么建议如何修复吗?

最佳答案

你拥有一切,只是没有连接起来。在执行并检查提取之前,您不应该实例化并插入新对象。您当前执行提取,但不检查是否存在重复项。这两个问题都需要解决,大致如下:

let entity = NSEntityDescription.entityForName("Medicine", inManagedObjectContext: context)
let query = PFQuery(className: "Medicine")
query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if error == nil {
for object in objects! {

if let name = object["medicineName"] as? String,
amount = object["amountQuantity"] as? String {

let predicate = NSPredicate(format: "name = %@", name)
self.fetchRequest.predicate = predicate

do{
let fetchedEntities = try self.context.executeFetchRequest(self.fetchRequest) as! [Medicine]
//save to Core Data

if fetchedEntities.count <= 0 {
let medicine = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: self.context)
medicine.setValue(name, forKey: "name")
medicine.setValue(amount, forKey: "amount")
}
} catch let error as NSError{
print(error)
}
}
}

do {
try self.context.save()
} catch let error as NSError {
print("Could not save \(error), \(error.userInfo)")
}
}
}

关于ios - 使用 NSPredicate 将对象保存到核心数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33457013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com