Cómo usar correctamente shouldCompactOnLaunch en RealmSwift
El ejemplo en la documentación (https://realm.io/docs/swift/latest/#compacting-realms) no es muy claro para mí, ya que no sé si la compactación podría llamarse todo el tiempo durante el uso de la aplicación o solo una vez al inicio. ¿La implementación a continuación es correcta o sería mejor hacer una configuración por separado, incluyendo shouldCompactOnLaunch para llamar una vez al iniciar la aplicación?
Si agrego shouldCompactOnLaunch a la configuración predeterminada, veo que se llama al bloque cada vez que creo una instancia de dominio.
Realm.Configuration.defaultConfiguration = Realm.Configuration(schemaVersion: schemaVersion, migrationBlock: migrationBlock,shouldCompactOnLaunch: { totalBytes, usedBytes in
// totalBytes refers to the size of the file on disk in bytes (data + free space)
// usedBytes refers to the number of bytes used by data in the file
// Compact if the file is over 100MB in size and less than 50% 'used'
let oneHundredMB = 100 * 1024 * 1024
print ("totalbytes \(totalBytes)")
print ("usedbytes \(usedBytes)")
if (totalBytes > oneHundredMB) && (Double(usedBytes) / Double(totalBytes)) < 0.7{
print("will compact realm")
}
return (totalBytes > oneHundredMB) && (Double(usedBytes) / Double(totalBytes)) < 0.7
})
do {
// Realm is compacted on the first open if the configuration block conditions were met.
_ = try Realm(configuration: config)
} catch {
// handle error compacting or opening Realm
}
Y una cosa más sería interesante para mí: ¿qué sucede si falla la compactación? Demasiado poco almacenamiento sería una razón. ¿Podré seguir accediendo a los datos y se omitirá la compactación?