Thursday, November 17, 2016

Core Data Transformable Vs Binary Options

Con un atributo binario, permite leer y escribir casos de NSData directamente. Con un atributo transformable, permite leer y escribir instancias de cualquier clase que se puede convertir desde y hacia NSData. El almacenamiento de datos actual es el mismo que con un atributo binario, pero Core de datos utiliza un NSValueTransformer para convertir a / de NSData cuando sea necesario. Por ejemplo, decir que su objeto gestionado tiene un atributo de imagen en la que sería conveniente leer y escribir UIImage directamente. Excepto, UIImage canto se guarda en la base de datos. Pero UIImage se puede convertir desde y hacia NSData. Por lo tanto, si se ha utilizado un atributo transformable que se podía leer y escribir UIImage si bien mantienen NSData en el almacén de datos. respondido Ene 10 13 a las 18:43 Tom, ¿Los datos transformables en mantener el mismo comportamiento con respecto NSData de almacenamiento externo (a pesar de que, al permitir el almacenamiento externo no está explícitamente en la interfaz de usuario, o serían manchas comenzar a aparecer en el almacén de datos Core) La documentación no indica precisamente que el atributo transformable se guardará en un registro externo o las normas que se aplicarán. ¿Puede compartir su experiencia ndash Tommie C Sep 15 a las 13 de 02:19 Exactamente tengo la misma pregunta. No hay tal opción en el tipo de atributo transformable para ser almacenado en quotExternal Storagequot. ¿Es esto por defecto conecta o lo ndash Marcin Kapusta 26 de febrero a las 16: 02i estoy a punto de emprender el proyecto de enormes proporciones de convertir mi vida (es decir, ya en la tienda de aplicaciones para un número de años) aplicación desde transformable para almacenar datos binarios para las imágenes en el núcleo de datos. Tengo muchos usuarios con grandes bases de datos que almacenan una gran cantidad de imágenes. Esto realmente se ha ralentizado la copia de seguridad / proceso de restauración, y probablemente causado algunas otras cuestiones detrás de las escenas también. Yo no sabía nada mejor cuando me puse encima de esta manera hace años. ¿Cómo puedo pasar por este proceso a fin de no perder ni una de mis imágenes a los clientes si se tratara de mí y de mis propios datos, estoy seguro de que podría conseguir que las cosas funcionen. Pero yo quiero estar seguro de hacer esto correctamente, paso a paso, y sabía que esta comunidad podría ser de gran ayuda en esa área. Realmente no sé por dónde empezar para las imágenes existentes. Básicamente, estoy buscando a 1) los pasos a seguir, a fin de no perder el ritmo. y 2) un consejo general, avisos, etc. en este proceso. Realmente necesito una migración limpia cuando esta versión va en vivo. Gracias de antemano a cualquier persona que pueda ayudar. pedido Mar 13 de 14 a las 18:38 A partir de la respuesta de Z S anterior, parece que voy a tener que pasar a la gestión de todos los archivos a mí mismo, ya que estoy tratando de poner en práctica la base de datos de sincronización iCloud también. Uf. Qué lata de gusanos será esta abierta ¿Es posible incluso obtener las imágenes quotoriginalquot de vuelta de los datos existentes, y si es así, va a tomar más tiempo que la fuerte migración que ha descrito más arriba ndash Sahm Mar 14 de 14 a las 03:13 La fuerte migración es lo peor. Hacer una exportación / importación será (no tan rápido como la migración de peso ligero) más rápido y le permitirá conservar todas las imágenes existentes ya que va a exportar a cabo en el disco como parte de la migración. ndash Marcus S. Zarra Mar 14 de 14 a las 3:39 That39s gracioso que digas eso, estoy empezando a poner en práctica la base de datos icloud sincronización de hoy también. El artículo fue muy reveladora. Doesn39t inspira mucha confianza, especialmente la última parte. Por lo tanto, parece que tengo más remedio que guardar la URL, a la derecha o tal vez todavía no es quotthe timequot tratar de implementar la sincronización sin embargo, yo estoy mirando conjuntos de Drew McCormack39s, si usted tiene alguna idea sobre eso. ndash Sahm Mar 14 de 14 a las 03:08 Mi opinión personal (después de haber enviado sincronización iCloud de Datos Básicos en mi aplicación) es que it39s bastante sólido si usted se limita a iOS7 / 10,9 SOLAMENTE. No hay duda de que shouldn39t apoya nada antes de eso. Incluso entonces, se requiere un poco de trabajo para apoyar, al igual que el artículo menciona (opciones para cambiar iCloud en, transiciones de activación / desactivación de la cuenta, etc.) la situación más común encontrarse con es que la sincronización deja de funcionar después de un tiempo para algunos usuarios y hay que proporcionar una manera de restablecer el recipiente. Me gustaría hacer más investigación. ndash Z S Mar 14 de 14 a las 22:22 haven39t parecía lo bastante en Conjuntos de comentar it39s habilidades, pero I39d tener cuidado de confiar en otra aplicación individual39s vs. Apple39s. Apple39s versión ha tenido problemas desde el envío, pero they39ve mejorado sustancialmente en cada actualización, y tienen un equipo de personas que apoyan este ataque. It39s importante saber que usted está construyendo dependencias en contra. Sin embargo, usted debe hacer su propia investigación, obviamente. ndash Z S Mar 14 de 14 a las 22:25 Por favor alguien puede actualizar esta It39s Han pasado más de un año desde que se hicieron estos comentarios. I39ve leer el artículo, pero también it39s IOS 9 vuelta de la esquina y sospecho 39Allow Storage39 Externo (es decir: debe) trabajar Si no es así, we39d han oído hablar de más gritos y quejas. I39m a punto de crear un nuevo proyecto y la necesidad de tomar las decisiones correctas. Gracias ndash strangetimes Jul 7 15 a las 4: Atributos 24Transformable en la base de datos aburrido: palabras y enteros divertido y misterioso: transformable Además de la cadena tipos habituales, flotante, booleano, fecha en la que puede definir las entidades de datos básicos con un atributo de tipo transformable. ¿Cuál es este tipo de magia, y lo que lo hace transformarse en añadir un alojamiento transformable, generar una subclase NSManagedObject, y esto es lo yoursquoll ver: Un viejo Identificación del llano. Por lo tanto, en teoría, podría configurar cualquier objeto allí. En 10.9, puedo establecer mi propio personalizado NSObject objeto subclase a la propiedad transformable, pero al guardar el contexto Puedo obtener una excepción para el encodeWithCoder no reconocido: mensaje. Therersquos la idea de que el objeto tiene que ajustarse a NSCoding. Así NSArray. NSDictionary. NSData. y otros son compatibles fuera de la caja. Así que usted puede utilizar su propia clase como está todo el tiempo que implementa los métodos de protocolo requeridas initWithCoder: y encodeWithCoder. A continuación, y de Datos Básicos puede conseguir una habitación y sus datos serán felices persistido y se dio cuenta con sus clases intacta. La desventaja es que los atributos estándar transformables se almacenan en el backend SQLite como plists binarias en gotas, por lo que canrsquot consulta de dichos campos directamente desde un NSPredicate. copia derechos de autor 20092016 Greg Heo Hecho en propiedades de San Francisco deinitUsing transformable ampamp datos binarios en la base de datos: Como saben los atributos de datos básicos puede tener propiedades como Indefinido, Integer16, Integer32, Integer64, flotador, decimal, Date, Boolean, String, Doble, Binario Los datos en C Objetivo tiene que ofrecer. Fuera de todas estas propiedades datos binarios es imprescindible para ser considerado. Con el apoyo de todas estas propiedades lenguaje Swift también se le proporciona la propiedad transformable que es muy interesante que importante. Debido a esta propiedad se puede poner cualquier tipo de datos en los datos básicos sin sobrecarga adicional. En este tutorial voy a mostrar cómo utilizar estas dos propiedades. (Propiedad transformable datos binarios ampamp). 1. Como es habitual crear un nombre de aplicación ampamp plantilla singleView que ImportantDataTypeInCoreData ampamp elegir idioma tan rápido Dejando casilla de verificación de datos básicos sin comprobar vamos a insertar nuestro modelo de datos básicos más tarde. como se muestra en la siguiente imagen: 2. Agregar una canción cuya URL que va a almacenar en el urlOfSong atribuimos vamos a crear en el modelo en breve. 3. Ahora que tenemos un proyecto para completar ampamp vamos a utilizar las propiedades de Datos Básicos de lo que ahora crear una clase de Cocoa Touch con el nombre de persistencia que es subclase de NSObject ampamp entonces para incluir el modelo, haga clic en la carpeta ImportantDataTypeInCoreData ampamp clic en Nueva - gt Archivo núcleo de datos (campo iOS) - gtData nombre del modelo ampamp confieren propiedades para luego continuar hasta que se creará como se muestra en la imagen: 4. a continuación, abra el modelo que acaba de crear ampamp añadir una entidad UseOfDataTypes nombradas con dos atributos urlOfSong nombre ampamp de tipo ampamp transformable datos binarios, respectivamente, que se muestra en la siguiente imagen: 5. Mantener los UseOfDataTypes entidad seleccionada vamos a crear una clase NSObject. Haga clic en el editor de ampamp continuación, haga clic en la opción Crear NSmanagedObject Subclase ampamp siga las instrucciones hasta que se creará la clase con el mismo nombre que entidad. NSObject subclase se crea con el mismo nombre de una entidad UseOfDataTypes abrirlo ampamp verá algo parecido a lo que se muestra en la siguiente imagen se presenta: Como se muestra en el atributo esta urlOfSong La imagen es de tipo AnyObject porque es de tipo transformable ampamp esto tiene que ser transformado a lo que hay que almacenar en el nombre de datos Básicos ampamp es de tipo NSData porque lo ponemos a datos binarios en el modelo. Vaya por delante ampamp transformar su clase en tanto se muestra en el siguiente archivo: managedObjectContext var. NSManagedObjectContext. dejar que modelURL NSBundle. mainBundle (). (. WithExtension propiedades: momd) URLForResource dejó managedObjectModel NSManagedObjectModel (contentsOfURL: modelURL) dejar que storeURL Persistencia. applicationDocumentDirectory. URLByAppendingPathComponent (properties. sqlite) dejar que persistentStoreCoordinator NSPersistentStoreCoordinator (managedObjectModel: managedObjectModel) Error var. NSError. nil si (persistentStoreCoordinator addPersistentStoreWithType (NSSQLiteStoreType configuración:... nil URL: storeURL, opciones:. nula de error: amperror) nil) dejar que managedObjectContext NSManagedObjectContext () managedObjectContext. persistentStoreCoordinator persistentStoreCoordinator Aquí en lo anterior muestra el código de todo lo que estamos haciendo es conseguir el Camino donde almacenamos el modelo que hemos creado nombramos como ampamp properties. xcdatamodeld luego la creación de la coordinadora tienda persistencia ampamp ManagedObjectModel Contexto ampamp. ------ Gtgtgtgtgtgt Ahora tenemos todo configurado añadir siguiente código para Persistence. Swift archivo para almacenar objetos en la base de datos: dejar que anyObject NSEntityDescription. insertNewObjectForEntityForName (. UseOfDataTypes inManagedObjectContext: managedObjectContext) como. UseOfDataTypes dejar que el camino NSURL (fileURLWithPath:. NSBundle mainBundle () pathForResource (Pooja OfType:.. Mp3)) anyObject. urlOfSong camino que NSURL var archievedName NSKeyedArchiver. archivedDataWithRootObject (Nombre) // archivar los datos para almacenar datos en la base de datos binarios attributeCore almacenamiento en caché de datos de imagen publicada el 16 de marzo 2012 por Hawk iMedia Es un patrón común para una aplicación para hacer algo con los datos que no es local. Se mantiene un rendimiento decente aplicación al recuperar los datos es uno de los retos (y no es el foco de este artículo). Mantener los datos, y bastante de él, para su uso posterior y para evitar tener que hacerlo de nuevo, es otro desafío. Hay soluciones obvias, algunos sencillos y otros no, y todas con sus propias ventajas y desventajas. Lo que se Almacenamiento en caché El almacenamiento en caché es, simplemente, mantener algo alrededor para su uso posterior que era 8220hard8221 estar en el primer lugar. Esto podría ser datos externos, un valor calculado, o cualquier cosa que preferiría no you8217d tiene que adquirir más de una vez si puede evitarlo. El almacenamiento en caché no debe considerarse como un proceso sin límites, sin embargo. Con esto quiero decir que can8217t simplemente almacenar en caché todo para siempre Tienes que tener una manera de purgar la caché periódicamente en base a algún algoritmo que tenga sentido para su aplicación. Un algoritmo común (y simple) es menos recientemente usado, o LRU. Con este algoritmo, la teoría es que los elementos de la caché que se han utilizado al menos, son candidatos para ser purgados forma la memoria caché basado en un umbral de no utilización. Se puede imaginar que en un dispositivo móvil purgar la caché es importante debido a las limitaciones de espacio inherentes. También puede elegir para almacenar en caché una cantidad limitada de datos (pero you8217d todavía necesita saber cuáles eliminar si la caché se hizo demasiado grande.) Objetivos de almacenamiento en caché de las razones para la memoria caché son bastante sencillos: Pero ¿cómo se logra esto depende en parte de lo una definición razonable de 8220performance8221 es para su aplicación. El rendimiento en lo que respecta a la caché será evidente en varios lugares diferentes: Inicial caché de carga caché de acceso de Cache Cache purga guardar como distintamente como I8217ve hizo esta lista, resulta que cada una de estas cosas están relacionadas entre sí en algún grado. Por ejemplo, purga de la caché es algo que se puede ejecutar durante la carga de la memoria caché. La frecuencia de la memoria caché de parada debe estar relacionado con algo así como la forma en la caché es 8220dirty8221 (cuántas cosas han cambiado desde la última vez que guardó) o cuánto tiempo ha transcurrido desde la última parada. Opciones de implementación Hay varias opciones para la implementación de un caché. Su elección depende mucho de qué tipo de datos son el almacenamiento en caché, la cantidad de datos que necesita para caché, cómo va a manejar su caché (es decir, la purga), y probablemente muchas otras cosas específicas para su aplicación. Las opciones obvias incluyen: base de datos de archivos de diccionario o alguna combinación de estos Let8217s miran cada uno de ellos. Diccionario El uso de un diccionario parece una opción obvia. Son fáciles de usar, y fácil de entender. Por muy pequeños conjuntos de datos, esto puede ser una buena opción. Pero una vez que el conjunto de datos se 8220large8221, usted comenzará a notar problemas de rendimiento especialmente cuando se necesita para cargarla, purgarlo, o guardarlo. El uso de un diccionario es ciertamente fácil y rápido. Así también, leyendo y escribiendo un diccionario es fácil, pero a medida que el conjunto de datos crece, estas acciones se convertirán lento porque you8217re leer y escribir todo el diccionario. Pros: Rápido y fácil, especialmente para los pequeños conjuntos de datos Contras: No es escalable, es decir, el rendimiento disminuye a medida que crece el conjunto de datos. Archivos Los archivos individuales podrían ser una mejora. Si dicen que el almacenamiento en caché you8217re, imágenes en miniatura, que podrían idear un plan para la escritura de cada archivo al sistema de archivos de una manera que posteriormente permite buscar de nuevo. Esto tiene la ventaja de que sólo you8217re lectura y escritura de un solo archivo a la vez. Tiene las desventajas que podría poner una carga pesada en el sistema de archivos y es difícil, sin los metadatos adicionales almacenados en otro lugar, para administrar la memoria caché en términos de purgar los datos antiguos o limitar it8217s tamaño. Este enfoque es un poco más complicado que usar un diccionario, pero todavía bastante simple de entender y de tratar. Pros: Todavía sencilla, y deben ser relativamente rápida para almacenar y recuperar datos, excepto en los casos Contras raras: Es difícil de administrar la caché de base de datos purga Probablemente se preguntó cuándo I8217d llegar a CoreData Una base de datos proporciona una abstracción agradable a sus datos, por no hablar de acceso aleatorio a los datos y la delegación de ciertas tareas 8220hard8221 a la base de datos subyacente. CoreData realidad es útil para el almacenamiento en caché, he aprendido, debido a los beneficios de las operaciones de base de datos similar. (Para que no me viene a la mente en los comentarios:. CoreData no es una base de datos) En más de una ocasión ahora han utilizado una memoria caché basada en CoreData para almacenar datos de imagen a nivel local. Los beneficios de rendimiento solo han merecido la pena. Pero yo didn8217t empezar con CoreData. De hecho, empecé con un diccionario. En una aplicación que almacenamos acerca de 3 MB o más de los datos de imagen, con una caducidad de 30 días en las entradas individuales. Resultó que intentar leer o escribir esta cantidad de datos como un diccionario era lento y peor aún, el diccionario entero tuvo que ser recorrido para encontrar entradas para expirar, lo que empeoró las cosas. Una manera de ejemplo, por ejemplo, yo quería señalar sólo algunas cosas acerca de mi caché de imágenes CoreData, ahora en uso en un par de aplicaciones. El modelo comenzó bastante simple: yo era un noobie CoreData cuando por primera vez desarrollado este, por lo que define el atributo de datos de imagen como datos binarios. Esto funcionó, pero requiere que el trabajo que hago en mi código para transformar los datos en un UIImage. Resulta CoreData puede hacer este tipo de transformación para usted, utilizando el tipo de atributo transformable. Más sobre esto más adelante. El atributo imageUrl es en realidad la clave para cada registro. Y el lastUsedTimestamp es la clave (por así decirlo) para la gestión de purga de la caché. Cuando mi aplicación se inicia, y el modelo y los componentes asociados se inicializan, lo primero que se hace es purgar la caché de cualquier cosa que haya expirado. Esto se realiza mediante una solicitud se ha podido recuperar predefinido: Y el siguiente código: Hay muchas cosas que me gusta de este código (creo). Por un lado, es compacto. No hay necesidad de iterar sobre toda la memoria caché para encontrar las entradas en las que we8217re interesado. De hecho, dejamos que CoreData acuerdo con eso. Y, en realidad tenemos que tocar un número muy pequeño de objetos (si lo hay) para eliminarlos. Al final, CoreData logra que los objetos están sucios, o eliminado, y hace lo correcto. Por lo que vale la pena it8217s, el código para obtener entradas en función de su URL es igualmente compacto. Utilizamos una solicitud se ha podido recuperar predefinido diferente para eso. Como una optimización, que quería dejar de almacenar datos binarios (y convertirlo en mi código para UIImage) y en lugar de utilizar un transformable. Parecía bastante sencillo: Crear una nueva versión del modelo, cambie el tipo de datos binario de datos para transformable, y dejar Ligera migración se encargue del resto. Por desgracia, ese trabajo didn8217t. Here8217s el modelo que finalmente ocurrió: al igual que el modelo de asignación para la migración: Esta permitido Ligera Migración para trabajar, pero tenía que hacer un poco de trabajo extra en mi código para mover los datos a partir de datos de la nueva imagen atributo de tipo transformable: La entrada de la variable es un objeto gestionado recientemente tomaron de CoreData. Para el caso en que no hay datos antiguos que cuelgan alrededor, tenemos que establecer el atributo de imagen a un UIImage creados con esos datos. CoreData se encargará de convertir de nuevo a datos binarios, y almacenar esa manera. Y en el futuro, el atributo de la imagen simplemente será una imagen podemos manipular. Esto no es quizás la forma más eficiente de haber hecho esto, pero parece que ha funcionado y lo couldn8217t encontrar otra solución. También hemos establecido entry. data a cero para que don8217t tenemos dos copias de los datos binarios en CoreData por lo que don8217t hacer esto 8220upgrade8221 cada vez para cada imagen. It8217s vale nada, por lo menos, que esta pequeña migración de datos sólo se realiza en forma de imágenes se requiera por el interfaz de usuario. Por lo que el dolor de esta se extendió a cabo tal como se utiliza la aplicación. Y siempre hay una posibilidad de que las entradas de cache tienen que ser mayores a cabo antes de que sean convertidos con este código. Me resulta reconfortante en eso. Conclusiones CoreData rocas Una vez pasado el código repetitivo estándar, pero es necesario que usted debe escribir al utilizar CoreData en su aplicación, es muy agradable de usar y realmente le libera de tener que preocuparse demasiado acerca de cómo administrar los datos y le permite centrarse en cómo se necesitará utilizar los datos de tu aplicación. Para los propósitos de almacenamiento en caché, creo que es una alternativa muy agradable y parece estar funcionando bien para mí hasta ahora. ¿Cuáles son sus pensamientos sobre el almacenamiento en caché con CoreData Quiero saber en los comentarios. Comparte esto: Tom Wilson dice: ¿No sería mejor para almacenar los datos de imagen en el disco y sólo tiene que utilizar los objetos de datos básicos para realizar un seguimiento de los meta-datos (url, la última marca de tiempo utilizado), y luego reemplazar el método prepareForDeletion de limpiar los archivos de almacenamiento de archivos para que pueda encontrar fácilmente y tienen únicos es fácil 8211 acaba de hacer un hash a cabo ya sea de la URL o la identificación de datos central (asegúrese de que su uno permanente y no temporal de un: P) que manera se puede recuperar y recorrer y hacer todo con los registros de caché, sin hacer datos básicos Recuperar los datos de la imagen en la memoria rAM constantemente. En caso de ser un aumento de rendimiento razonable sin mucho effort8230 Hola Tom - Gracias por la sugerencia it8217s una buena optimización. Un detalle que me fui de mi artículo es que una vez que voy a buscar un objeto gestionado de CoreData, lo guardo en un diccionario en memoria. Así que una vez los datos de imagen (como parte del objeto gestionado) se lee en, it8217s en la memoria. Así que la próxima vez it8217s necesario, que de E / S no es necesario. Dicho esto, su sugerencia es aún válida y se mueve en la dirección de la combinación de técnicas de caché disponibles en soluciones híbridas interesantes. Gracias Karl Puder dice: ¿Usted guardó el campo 8220data8221 debido a que ya existía, por compatibilidad con versiones anteriores, o por alguna otra razón por la que creo que me gustaría ir al contenido de una dirección URL y convertirla en una imagen de inmediato, ya que la solicitud es de suponer pasando porque tenemos que mostrar esa cosa en la pantalla en este momento. Fue un movimiento de desesperación. Mi esperanza era que la migración de peso ligero sería automagicamente migrar al modelo original (url, datos, fecha y hora) para el nuevo modelo (url, imagen, marca de tiempo) mediante un modelo de asignación que asigna los datos - imagen. Pero eso no funcionó. Así que hice el nuevo modelo incluye todos los viejos atributos model8217s además de un nuevo atributo, imagen. El modelo de mapeo mapea los viejos atributos directamente a sus contrapartes en el nuevo modelo y establece el nuevo atributo de la imagen a 0 (o nula, de manera efectiva). A continuación, en el código, puedo comprobar si hay un valor nulo en la imagen del objeto gestionado y se transformo en el código del atributo de datos con el atributo de la imagen, y establecer el atributo de datos a cero. Esto no es quizás la forma 8220right8221 haber hecho esto, pero funcionó. Esto es más fácil si utiliza las relaciones de objetos de datos grandes (BLOB). Al igual que con todos los problemas de rendimiento que le recomendaría utilizando el método más simple hasta su un problema de rendimiento. I8217ve sido mucho más feliz cuando consigo que funcione primero y luego usar optimizaciones perfil impulsada. Además, después de 20 años de programación, también es sorprendente la rapidez con optimizaciones bibliotecas o OS8217s optimizaciones a nivel de aplicación obsoleta. Hola Todd - Gracias por su comentario. En cuanto a usar los métodos más simples en primer lugar, estoy de acuerdo. Sin embargo, en este caso particular, cuando empecé a usar un NSDictionary, he encontrado que la lectura y la escritura se convirtió en un verdadero cuello de botella, por lo que me puse a buscar en CoreData. Dylan Neild dice: Creo que la única cosa a tener en cuenta aquí es icloud copia de seguridad, especialmente si está utilizando la base de datos en iOS. En concreto, si está almacenando el archivo de datos SQLite Core en el directorio Documentos de iCloud se va a realizar copias de forma automática cuando el usuario conecta su teléfono al poder (si así lo han configurado). El problema con el almacenamiento de datos blob en ese archivo SQLite es que este archivo solo está creciendo en tamaño, con cada nota añadió y I8217d pensar iCloud podría volver a copia de seguridad de todo el archivo a su vez, ningún Esto puede ser prohibitivamente lenta / intensivo de datos al agregar 5 KB una imagen a una base de datos de 500 MB significa una nueva copia de seguridad 500MB5K. A menos que Apple tiene algún tipo de estrategia de copias de seguridad 8220row-level8221 cuando se trata de archivos sqlite Core datos que hacer la sincronización a nivel de fila para icloud sincronización de modo it8217s posible 8211 pero can8217t encontrar ninguna referencia a esto en cualquier lugar. Dylan - Usted está absolutamente correcto. En las implementaciones de este esquema de caché CoreData que explícitamente no han puesto el archivo de caché en el directorio / Documentos exactamente por las razones que resalta. Es una memoria caché, después de todo. Por lo que el lugar adecuado para poner el archivo se encuentra en / Library / Caches, por lo que iOS puede reclamar ese espacio si es necesario. Hay una característica añadida en IOS 5.0.1 que permite a una aplicación establecer un bit 8220no backup8221 en cualquier archivo. That8217s otra manera de decir que el sistema no copia de seguridad de algo. Básicamente, la regla de oro es que si el usuario crea los datos, que debe ir en / Documentos. Si didn8217t y se pueden volver a crear o re-cargada fácilmente, se debe entrar en


No comments:

Post a Comment