Ошибка: - [UIImage _deleteExternalReferenceFromPermanentLocation] нераспознанный селектор отправлен на экземпляр - PullRequest
7 голосов
/ 28 октября 2011

Когда я удаляю управляемый объект, который содержит изображение, сохраненное в виде преобразуемого значения во внешней записи, я получаю сбой и эту ошибку:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImage _deleteExternalReferenceFromPermanentLocation]: unrecognized selector sent to instance 0xde49360' 

Ответы [ 3 ]

12 голосов
/ 04 ноября 2011

Я ответил на нечто подобное на форумах разработчиков Apple .
Я предполагаю, что у вас установлен флажок внешнего хранилища в этом поле в моделирующем устройстве данных.

Существует ошибка, которую можно обойти.Я сделал это так:
После того, как вы обновили свои данные и сохранили контекст, любая попытка их удаления вызовет это исключение «нераспознанный селектор».
Чтобы принудительно настроить правильный объект, который может ответить на сообщение _deleteExternalReferenceFromPermanentLocation, сделайте это:

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

Объект превращается в неисправность.Когда вы в следующий раз получите к нему доступ или удалите его, внешние данные будут удалены, как и ожидалось, поскольку правильный объект, который обернет ваши внешние данные, будет извлечен из хранилища и будет правильно отвечать на _deleteExternalReferenceFromPermanentLocation.

2 голосов
/ 24 февраля 2012

Я тоже столкнулся с этой проблемой с атрибутом основных данных NSDate.Мне не нужно, чтобы он хранился извне, но не смог найти ни одного флажка для сброса (Xcode 4.2).Однако, это было ясно, когда я ack отредактировал для него:

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

Так что я просто удалил и заново создал этот атрибут с тем же именем.Атрибут allowsExternalBinaryDataStorage XML исчез, как и мой сбой.Должно быть, я случайно проверил что-то во время бета-версии iOS 5 или чего-то подобного, и он просто застрял в модели данных, спокойно ожидая, пока я не попытаюсь удалить объект.

В любом случае, возможно, это поможет другим людям.которые сталкиваются с ошибкой iOS, но не нуждаются в сохранении внешнего атрибута.

2 голосов
/ 29 октября 2011

означает, что UIImage не отвечает на селектор:

_deleteExternalReferenceFromPermanentLocation

…, что означает, что UIImage не реализует этот конкретный метод.Похоже, это один из частных методов, которые Core Data использует для хранения больших порций данных во внешних файлах.Эта функция доступна только в iOS 5.

В этом случае есть две наиболее вероятные причины:

(1) Вы спутали объект UIImage с управляемым объектом или наоборот, так чтосообщение, предназначенное для одного класса, отправляется в другой (это самая распространенная причина этого класса ошибок.)

(2) Вы пытаетесь запустить код, скомпилированный для iOS 5 под более ранней версией iOS, либо в симулятореили устройство.

...