ทำไมเราต้องโทรหาคอนเท็กซ์.ลบแบบอักษรเพื่อทำการลบข้อรายการจาก NSManagedObject อาเรย์?

0

คำถาม

คิดว่าฉันมี;

var itemArray = [Item]()

และรายการเป็น NSManagedObject. รายการมีสองแอททริบิวต์ต่างๆ"หัวเรื่อง":ข้อความและ"ทำ":ค่าตรรกะ. นี่คือรูปของข้อมูลของคุณครูแต่พอกลับมา

enter image description here

//  Item+CoreDataClass.swift

//  This file was automatically generated and should not be edited.
//

 import Foundation
 import CoreData

 public class Item: NSManagedObject {

 }

ตอนที่ฉันจะเปลี่ยนค่าของเสร็จแล้วโทรหาคอนเท็กซ์.บันทึกมันโดยอัตโนมัติสะท้อนออกจะดื้อดึงมาตลอดตู้คอนเทนเนอร์. อย่างไรก็ตามตอนที่ฉันเอาเป็นธาตุจากอาเรย์โดยบอกว่า

itemArray.remove(at: someindex)

แล้วโทรหาคอนเท็กซ์.ช่วย รายการไม่ใช่กลบออกไปจากดื้อดึงมาตลอดตู้คอนเทนเนอร์. อย่างเดียวเท่านั้นถ้าฉันโทรมา

context.delete(itemArray[someindex])

งั้นรายการเป็นอย่างแท้จริลบออกไปจากร้านขายของ

งั้นเหตุผลที่ว่าทำไมถึงมีเพียงการเอาออกจาก itemArray และช่วยชีวิตคอนเท็กซ์ไม่เพียงพอที่ถึงแม้ว่าการเปลี่ยนลักษณะเฉพาะ'ค่าและช่วยชีวิตคอนเท็กซ์คือนั้นเพียงพอสำหรับความสำเร็จ CRUD ปฏิบัติการอบแกนกลางข้อมูลนั้นเหรอ?

core-data ios swift
2021-11-23 12:52:23
3

คำตอบที่ดีที่สุด

1

เมื่อคุณเปลี่ยนลักษณะเฉพาะในรายการสิ่งนั้นแข็งข้อมูล(อันที่จริง NSManagedObjectContext)detects นั่นตั้งแต่การซื้อขายทางธุรกินของ NSManagedObjectContext และรายการคือทำเครื่องหมายที่สกปรก แต่คุณอาเรย์ไม่มีการเชื่อมต่อไปที่ NSManagedObjectContext ในทางใดทางหนึ่งดังนั้นมีคุณเปลี่ยนแปลงมันให้เหลือโดยไม่ถูกจับโดย NSManagedObjectContext และนั่นคือเหตุผลว่าทำไมเธอถึงอยากบอกมันในข้อบังคับว่าคุณต้องการลบรายการที่คุณถูกลบออกจากอาเรย์.

ทางอื่นที่จะดูมันคืออะไรที่คุณสร้าง/กำหนดของลึกข้อมูลแบบเป็นที่รู้จักโดย NSManagedObjectContext แต่อะไรสร้างขึ้นข้างนอกในกรีนรหัสก็คือไม่รู้หนึ่งในพวกเราคิดว่านะ ถ้าคุณเริ่มทำงานกับจะมีความสัมพันธ์ระหว่าง entities คุณจะเห็นมันแล้วเพิ่มหรือลบวัตถุจากที่จะมีชุดสะสมจะจัดการโดยตรงโดย NSManagedObjectContext ในทางที่คุณคาดหวังสำหรับของคุณอาเรย์.

2021-11-24 12:13:31
1

ที่อาเรย์ var itemArray = [Item]() ไม่มีทางโดยตรงความสัมพันธ์กับ underlying กฐานข้อมูลเหมือนกัน ดังนั้นการลบรายการจากอาเรย์ไม่ได้ผลกระทบต่อแกนหลักของข้อมูลฐานข้อมูล

เพื่อสร้าง,บันทึกหรือลบ NSManagedObject โหอยู่ในใจกลางข้อมูลในฐานข้อมูลคุณต้องโทรเรียกฟังก์ชันที่เกี่ยวข้องกับของที่ถูกต้อ NSManagedObjectContext.

2021-11-23 13:15:17
1

มีปฏิบัติการบน CoreData ควรจะจบลงที่ธุรกิจ NSManagedObjectContext อย่างที่มันเป็น scratchpad เพื่อเข้าใช้งานหรือปรับปรุงใดๆสิ่งมีชีวิตแบบหนึ่งในฐานข้อมูล ดังนั้นในคดีของคุณขณะลบที่ Item รายการคุณควรจะทำอย่างนั้นผ่านคอนเท็กซ์เดียวที่จะสะท้อนอยู่บนฐานข้อมูล

var itemArray = [Item]()
let context = //get your context
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Item")
let predicate = NSPredicate(format: " (primaryKey == %@) ", "your_primary_key")
fetchRequest.predicate = predicate
itemArray = try! context.fetch(fetchRequest)
for i in 0 ..< itemArray.count where i < itemArray.count-1 {
    context.delete(itemArray[i])
}

do {
    try context.save()
} catch {
    // print the error
}
2021-11-23 14:54:08

ฉันสงสัยเกี่ยวกับทำไมถึงเรียกปรับปรุงโดยตรงสะท้อนอยู่บน CoreData ฐาน
Akif

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่