如何在 swift 3 中从核心数据中删除对象
Posted
技术标签:
【中文标题】如何在 swift 3 中从核心数据中删除对象【英文标题】:How can I delete object from core data in swift 3 【发布时间】:2016-11-23 04:41:04 【问题描述】:这就是我将数据保存到核心的方式,现在我想从整个数据中删除特定对象。我该怎么做? 这就是我保存数据的方式:
func saveProductDetails(product : Product)
// set user_id
product.user_id = UserDefaults.sharedInstace.getCustomerId()
//save data locally for the time been
let entity = NSEntityDescription.entityForName("Product", inManagedObjectContext: self.writeContext)
let category = NSEntityDescription.entityForName("Category", inManagedObjectContext: self.writeContext)
let brand = NSEntityDescription.entityForName("Brand", inManagedObjectContext: self.writeContext)
var entityProduct = NSManagedObject(entity: entity!, insertIntoManagedObjectContext:self.writeContext)
var entityCategory = NSManagedObject(entity: category!, insertIntoManagedObjectContext:self.writeContext)
var entityBrand = NSManagedObject(entity: brand!,insertIntoManagedObjectContext: self.writeContext)
entityProduct = product.settingManagedObject(entityProduct)
entityProduct.setValue(String(Utill.sharedInstace.getTimeStamp()), forKey: "time_stamp")
entityProduct.setValue(Constant.Status.STATUS_NOT_VERIFIED, forKey: "status")
if product.categoryObject != nil
product.categoryObject.user_id = UserDefaults.sharedInstace.getCustomerId();
entityCategory = product.categoryObject.settingManagedObject(entityCategory)
if product.brandObject != nil
product.brandObject.user_id = UserDefaults.sharedInstace.getCustomerId();
entityBrand = product.brandObject.settingManagedObject(entityBrand)
entityProduct.setValue(entityCategory, forKey:"category")
entityProduct.setValue(entityBrand, forKey: "brand")
writeContext.performBlock
do
try self.writeContext.save()
self.managedContext.performBlock(
do
try self.managedContext.save()
catch let error as NSError
print("Could not save \(error), \(error.userInfo)")
)
catch let error as NSError
print("Could not save \(error), \(error.userInfo)")
return
这个Product
对象与另外两个对象有关系,我只想删除特定对象,而不是全部。这意味着删除(product.purchase_id == "selected_purchse_id"
),在UITableView
。
该怎么做?
【问题讨论】:
【参考方案1】:检查此代码以进行 swift 3 核心数据操作
import CoreData
class CoreDataOperations: NSObject
// MARK: Save data
func saveData() -> Void
let managedObjectContext = getContext()
let personData = NSEntityDescription.insertNewObject(forEntityName: "Person", into: managedObjectContext) as! Person
personData.name = "Raj"
personData.city = "AnyXYZ"
do
try managedObjectContext.save()
print("saved!")
catch let error as NSError
print("Could not save \(error), \(error.userInfo)")
catch
// MARK: Fetching Data
func fetchData() -> Void
let moc = getContext()
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Person")
do
let fetchedPerson = try moc.fetch(fetchRequest) as! [Person]
print(fetchedPerson.count)
for object in fetchedPerson
print(object.name!)
catch
fatalError("Failed to fetch employees: \(error)")
// 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: Update Data
func updateRecords() -> 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
object.name! = "\(object.name!) Joshi"
print(object.name!)
do
try moc.save()
print("saved")
catch let error as NSError
print("Could not save \(error), \(error.userInfo)")
// MARK: Get Context
func getContext () -> NSManagedObjectContext
let appDelegate = UIApplication.shared.delegate as! AppDelegate
return appDelegate.persistentContainer.viewContext
您可以从https://github.com/rajkumar24u/CoreDataOperations获得更多信息
【讨论】:
以上是关于如何在 swift 3 中从核心数据中删除对象的主要内容,如果未能解决你的问题,请参考以下文章