私はEncrypted CoreData Sqlite Storeを使用してCoreDataスタックを暗号化しています。私は400kを超えるレコードを格納するデータベースを持っています。私はいくつかの活動に基づいてそれらのレコードの大部分を削除したい。私がする必要があるこの暗号化されたストアのバッチ削除が利用できないので、データを読み込むためにフェッチ要求を実行します。暗号化されたコアデータは、400k +レコードを削除するのにかなり時間がかかります
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "MyEntity")
fetchRequest.includesPropertyValues = false
// Fetch data till minimum threshold limit
let newPredicate = NSPredicate(format: "%K <= %@", "recordTime", NSNumber(value: maxAllowedTimeStamp as Int64))
fetchRequest.predicate = newPredicate
let objectsToDelete = myDataController.executeFetchRequest(fetchRequest) as? [NSManagedObject]
私は、オブジェクトの動作一つ一つを削除実行したより:この操作はより7-8分を取っている
for object in objectsToDelete {
myDataController.deleteManagedObject(object)
}
。私は、コアデータが障害オブジェクトを提供するのに十分速いと信じています。フェッチ時間を短縮するためにプロパティ値を取っていない私の述語を見ることができるので、この長い時間がかかりません。
オブジェクトを削除するのに何が時間がかかるのか理解してくれる人がいますか?
こんにちはKappil バッチ削除のオプションは、データ全体を反復処理し、削除するのに多くの時間がかかるため、最適です。このリンクを試してくださいhttps://stackoverflow.com/questions/23201917/ios-core-data-encryption#answer-23203728データの暗号化/セキュリティについては、バッチ削除を試してください –