IOS SWIFT开发–修改数据模型名之后,实体名字没有修改,怎么删除旧的数据

当我们创建了一个不同名字的数据模型,然后创建了同样名字的实体,修改了某些字段的类型,获取云端数据,发现很多是之前旧的测试数据,也就是说获取数据时,可能会把新旧的都获取下来。

如果需要删除这些旧的数据应该怎么操作呢,以下是解决方法

我们通过NSFetchRequest(entityName: entityName) 来获取实体的数据,然后删掉它,这个函数会把所有数据都获取下来,也就是原来模型的数据也会获取到。

func deleteOldData(entityName: String) { //传入实体名字

    let fetchRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: entityName)

    do {

        let results = try viewContext.fetch(fetchRequest) //保障你的viewContext是有效的

        for object in results {

            if let object = object as? NSManagedObject {

                viewContext.delete(object)

            }

        }

        try viewContext.save()

        print("Old data deleted successfully.")

    } catch {

        print("Failed to delete old data: \(error)")

    }

}

调用方法:

deleteOldData(entityName: “你的数据模型实体名”)

附:

//另外分享一个,根据记录类型删除数据的方法,注意该方法无法删除以上提到的旧数据。

func clearCloudKitRecords(for recordType: String) {   

    let container = CKContainer.default()

    let publicDatabase = container.privateCloudDatabase



    // 创建查询

    let query = CKQuery(recordType: recordType, predicate: NSPredicate(value: true))

    // 设置查询结果限制

    query.sortDescriptors = [NSSortDescriptor(key: "CD_timestamp", ascending: false)]

    // 执行查询

    publicDatabase.perform(query, inZoneWith: nil) { (records, error) in

        if let error = error {

            print("Error fetching records: \(error)")

            return

        }



        guard let records = records, !records.isEmpty else {

            print("No records found.")

            return

        }



        // 删除记录

        let deleteOperation = CKModifyRecordsOperation(recordsToSave: nil, recordIDsToDelete: records.map { $0.recordID })



        deleteOperation.modifyRecordsCompletionBlock = { savedRecords, deletedRecordIDs, error in

            if let error = error {

                print("Error deleting records: \(error)")

            } else {

                print("Successfully deleted records: \(deletedRecordIDs ?? [])")



                // 如果还有更多记录需要删除,递归调用删除函数

                if records.count == 100 {

                    self.clearCloudKitRecords(for: recordType)

                }

            }

        }



        publicDatabase.add(deleteOperation)

    }

}

// 使用方法

clearCloudKitRecords(for: “传入一个记录类型record type”)

IOS SWIFT开发–修改数据模型名之后,实体名字没有修改,怎么删除旧的数据

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Scroll to top