我正在iOS10上开发一个带有新CoreData和Swift3的应用程序.如果id不存在,我们如何创建新对象(如果对象已经存在,我们从核心数据中提取对象并仅修改它)?
就像是
let objectID = someNumber
If exist with objectID = someNumber {
//modify object
}else {
//create new object
//assign attribute
}
//save
Run Code Online (Sandbox Code Playgroud)
我正在尝试为CoreData使用新的iOS10 Swift 3语法.我使用本机代码而不是任何第三方库.考虑使用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
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:"在初始化之前使用变量文章".我们如何使函数返回文章或更新现有文章并返回结果?
Jan*_*Jan 19
我假设您知道如何创建和修改对象.对于缺失的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
}
Run Code Online (Sandbox Code Playgroud)
这种新的更有效的方法是使用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
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10189 次 |
最近记录: |