不幸的是,新的核心数据语义让我发疯.我之前的问题有一个干净的代码,由于头文件的自动生成不正确而无效.现在我继续我的工作删除对象.我的代码似乎很简单:
func deleteProfile(withID: Int) {
let fetchRequest: NSFetchRequest<Profile> = Profile.fetchRequest()
fetchRequest.predicate = Predicate.init(format: "profileID==\(withID)")
let object = try! context.fetch(fetchRequest)
context.delete(object)
}
Run Code Online (Sandbox Code Playgroud)
我做了一个"硬"调试print(object)而不是context.delete(object)它,它向我展示了正确的对象.所以我只需删除它.
PS没有deleteObject.现在NSManagedContext只有public func delete(_ sender: AnyObject?)
Mar*_*n R 76
在您的情况下,获取的结果是一个托管对象
数组[Event],因此您可以枚举数组并删除所有匹配的对象.示例(在获取错误的情况下使用try?而不是try!避免崩溃):
if let result = try? context.fetch(fetchRequest) {
for object in result {
context.delete(object)
}
}
Run Code Online (Sandbox Code Playgroud)
如果不存在匹配的对象,则获取成功,但结果数组为空.
注意:在您的代码中,object具有类型[Event],因此具有
context.delete(object)
Run Code Online (Sandbox Code Playgroud)
编译器创建一个调用
public func delete(_ sender: AnyObject?)
Run Code Online (Sandbox Code Playgroud)
的方法NSObject而不是预期的
public func delete(_ object: NSManagedObject)
Run Code Online (Sandbox Code Playgroud)
的方法NSManagedObjectContext.这就是您的代码编译但在运行时失败的原因.
J. *_*pes 43
这里的诀窍是删除对象后保存上下文.
let fetchRequest: NSFetchRequest<Profile> = Profile.fetchRequest()
fetchRequest.predicate = Predicate.init(format: "profileID==\(withID)")
let objects = try! context.fetch(fetchRequest)
for obj in objects {
context.delete(obj)
}
do {
try context.save() // <- remember to put this :)
} catch {
// Do something... fatalerror
}
Run Code Online (Sandbox Code Playgroud)
我希望这可以帮助别人.
Raj*_*shi 18
删除核心数据对象swift 3
// MARK: Delete Data Records
func deleteRecords() -> Void {
let moc = getContext()
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Person")
let result = try? moc.fetch(fetchRequest)
let resultData = result as! [Person]
for object in resultData {
moc.delete(object)
}
do {
try moc.save()
print("saved!")
} catch let error as NSError {
print("Could not save \(error), \(error.userInfo)")
} catch {
}
}
// MARK: Get Context
func getContext () -> NSManagedObjectContext {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
return appDelegate.persistentContainer.viewContext
}
Run Code Online (Sandbox Code Playgroud)
小智 14
func deleteRecords() {
let delegate = UIApplication.shared.delegate as! AppDelegate
let context = delegate.persistentContainer.viewContext
let deleteFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "nameofentity")
let deleteRequest = NSBatchDeleteRequest(fetchRequest: deleteFetch)
do {
try context.execute(deleteRequest)
try context.save()
} catch {
print ("There was an error")
}
}
Run Code Online (Sandbox Code Playgroud)
Swift 4.1、4.2和5.0
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
let requestDel = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
requestDel.returnsObjectsAsFaults = false
// If you want to delete data on basis of some condition then you can use NSPredicate
// let predicateDel = NSPredicate(format: "age > %d", argumentArray: [10])
// requestDel.predicate = predicateDel
do {
let arrUsrObj = try context.fetch(requestDel)
for usrObj in arrUsrObj as! [NSManagedObject] { // Fetching Object
context.delete(usrObj) // Deleting Object
}
} catch {
print("Failed")
}
// Saving the Delete operation
do {
try context.save()
} catch {
print("Failed saving")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
65651 次 |
| 最近记录: |