gpt4 book ai didi

core-data - Swift 3 iOS10核心数据根据id检查记录是否已经存在

转载 作者:行者123 更新时间:2023-12-02 22:30:12 26 4
gpt4 key购买 nike

我正在 iOS10 上使用新的 CoreData 和 Swift3 开发一个应用程序。仅当 id 不存在时,我们如何创建新对象(如果对象已经存在,我们从核心数据中提取对象并仅修改它)?

类似于

let objectID = someNumber

If exist with objectID = someNumber {
//modify object
}else {
//create new object
//assign attribute
}

//save

我正在尝试对 CoreData 使用新的 iOS10 Swift 3 语法。我使用的是 native 代码,而不是任何第三方库。考虑使用 fetch,但不知道此任务的正确语法是什么。

更新:感谢@Jan,我找到了检查方法。我的更新问题是从给定的 JSON 创建或更新实体。这是我的功能

static func creatOrUpdateArticle(_ json: JSON, context: NSManagedObjectContext) ->Article {

var article: Article

let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Article")
let predicateID = NSPredicate(format: "id == %@",json[Key.id].stringValue)
fetchRequest.predicate = predicateID

do {

let results = try context.fetch(fetchRequest)
if results.count > 0 {
article = results.first as! Article
}else {
article = Article(context: context)
}

article.webUrl = json[Key.webUrl].string


}
catch let error {
print(error.localizedDescription)
}
return article
}

我收到错误:“变量文章在初始化之前已使用”。我们如何让函数返回一篇文章或更新现有文章并返回结果?

最佳答案

我假设您知道如何创建和修改对象。对于缺少的 exists 部分,您可以使用如下内容:

func someEntityExists(id: Int) -> Bool {
var fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "SomeEntity")
fetchRequest.predicate = NSPredicate(format: "someField = %d", id)

var results: [NSManagedObject] = []

do {
results = try managedObjectContext.fetch(fetchRequest)
}
catch {
print("error executing fetch request: \(error)")
}

return results.count > 0
}

更有效的新方法是使用 NSFetchRequestResult

func someEntityExists(id: Int) -> Bool {
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "SomeEntity")
fetchRequest.includesSubentities = false

var entitiesCount = 0

do {
entitiesCount = try managedObjectContext.count(for: fetchRequest)
}
catch {
print("error executing fetch request: \(error)")
}

return entitiesCount > 0
}

关于core-data - Swift 3 iOS10核心数据根据id检查记录是否已经存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44658152/

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