2011-10-28 14 views

Respuesta

12

Respondí algo similar en el Apple Developer forums.
Supongo que tiene la casilla de verificación de almacenamiento externo seleccionada en ese campo en el modelador de datos.

Hay un error que se puede solucionar. Lo hice así:
Una vez que haya actualizado sus datos y guardado el contexto, cualquier intento de eliminarlo generará esta excepción de 'selector no reconocido'.
para forzar el objeto correcto que pueda responder al mensaje _deleteExternalReferenceFromPermanentLocation, hacer esto:

[[self managedObjectContext] refreshObject:myobject mergeChanges:NO]; 

El objeto se convierte en un fallo. La próxima vez que acceda o lo elimine, los datos externos se eliminarán como se espera, ya que el objeto correcto que envuelve sus datos externos se extraerá de la tienda y responderá correctamente a _deleteExternalReferenceFromPermanentLocation.

+0

¡Funciona como un amuleto, muchas gracias! – Shmidt

+0

¿Esto también es un problema para el tipo de datos básicos "Datos binarios" (con "Se permite el almacenamiento externo" activado), o solo un problema para "Transformable"? – Hope4You

2

Los medios UIImage que no responde a la:

_deleteExternalReferenceFromPermanentLocation 

... selector que significa que UIImage no implementa ese método en particular. Este parece ser uno de los métodos privados que utiliza Core Data para almacenar grandes cantidades de datos en archivos externos. Esa es una función sólo está disponible en iOS 5.

En este caso hay dos causas más probables:

(1) Usted ha confundido un objeto UIImage con un objeto o viceversa administrado de tal manera que un mensaje dirigido a una clase se envía a otra (esa es la causa más común de esta clase de error).

(2) Intenta ejecutar código compilado para iOS 5 en un iOS anterior, ya sea en el simulador o en el dispositivo.

+0

Tengo un atributo transformable, en el que almaceno UIImage a través de NSValueTransformer ... Según tengo entendido, necesito cambiar este atributo a NSData para evitar este mensaje de error – Shmidt

2

Me encontré con este problema, también, con un atributo de datos de núcleo NSDate. No necesito que se almacene externamente, pero no pude encontrar ninguna casilla para desarmar (Xcode 4.2). Sin embargo, era claramente allí cuando ack ed para ello:

> ack -aiQ external Collections.xcdatamodeld 
Collections.xcdatamodeld/Collections.xcdatamodel/contents 
12:  <attribute name="createdAt" attributeType="Date" allowsExternalBinaryDataStorage="YES" indexed="YES" syncable="YES"/> 

Así que acaba de eliminar y volver a crear ese atributo con el mismo nombre. El atributo XML allowsExternalBinaryDataStorage desapareció y también lo hizo mi bloqueo. Debo haber verificado inadvertidamente algo durante una versión beta de iOS 5 o algo así y simplemente se quedó atascado en el modelo de datos, esperando silenciosamente hasta que intenté eliminar un objeto.

De todos modos, quizás esto ayude a otras personas que se encuentren con lo que parece ser un error de iOS pero no necesitan que el atributo en cuestión se almacene externamente.

Cuestiones relacionadas