残念ながら、新しいCore Dataのセマンティクスに夢中になります。以前の質問には、ヘッダーファイルの自動生成が正しくないために機能しないクリーンなコードがありました。今、オブジェクトを削除する作業を続けています。私のコードは非常にシンプルなようです:
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)
}
print(object)
の代わりにcontext.delete(object)
を使用して「ハード」デバッグを行ったところ、正しいオブジェクトが表示されました。削除するだけです。
追伸deleteObject
はありません。 NSManagedContextにはpublic func delete(_ sender: AnyObject?)
しかありません
フェッチの結果は、管理対象オブジェクトのarrayです。この場合は[Event]
であるため、配列を列挙して、一致するすべてのオブジェクトを削除できます。例(フェッチエラーの場合のクラッシュを避けるためにtry?
の代わりにtry!
を使用):
if let result = try? context.fetch(fetchRequest) {
for object in result {
context.delete(object)
}
}
一致するオブジェクトが存在しない場合、フェッチは成功しますが、結果の配列は空です。
注:コードでは、object
の型は[Event]
であるため、
context.delete(object)
コンパイラは、への呼び出しを作成します
public func delete(_ sender: AnyObject?)
予想される代わりにNSObject
のメソッド
public func delete(_ object: NSManagedObject)
NSManagedObjectContext
のメソッド。そのため、コードはコンパイルされますが、実行時に失敗します。
ここでのコツは、オブジェクトを削除した後にコンテキストを保存することです。
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
}
これが誰かを助けることを願っています。
コアデータオブジェクトの削除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
}
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")
}
}
Swift 4.1および4.2
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")
}
エンティティに文字列を使用しないSwift 4
let fetchRequest: NSFetchRequest<Profile> = Profile.fetchRequest()
fetchRequest.predicate = Predicate.init(format: "profileID==\(withID)")
do {
let objects = try context.fetch(fetchRequest)
for object in objects {
context.delete(object)
}
try context.save()
} catch _ {
// error handling
}
NS
それは私にそれらをロードせずに一度に複数のオブジェクトで削除操作を実行できます
fileprivate func deleteRecords(){
debugPrint("Before","Making")
//Here UserNotification class is NSManagedObject Class.
let request = UserNotification.fetchRequest() as NSFetchRequest<UserNotification>
let context = helper.persistentContainer.viewContext
do{
let deleteRequest = NSBatchDeleteRequest(fetchRequest: request as! NSFetchRequest<NSFetchRequestResult>)
do{
try context.execute(deleteRequest)
debugPrint("Batch deleted")
}
}catch let error as NSError {
debugPrint("Error",error)
}
}
Swift 5、4.2のクエリでコアデータオブジェクトを削除
let fetchrequest = NSFetchRequest<Your_Model>(entityName: "Your_Entity_Name")
fetchrequest.predicate = NSPredicate(format: "any your_key == %d", your_value)
これが誰かに役立つことを願って
コアデータからオブジェクトを削除する
let entity = NSEntityDescription.entity(forEntityName: "Students", in: managedContext)
let request = NSFetchRequest<NSFetchRequestResult>()
request.entity = entity
if let result = try? managedContext.fetch(request) {
for object in result {
managedContext.delete(object as! NSManagedObject)
}
txtName.text = ""
txtPhone.text = ""
txt_Address.text = ""
labelStatus.text = "Deleted"
}