iOs5: NSInvalidArgumentException при создании NSManagedObject из представления URI - PullRequest
1 голос
/ 03 ноября 2011

Я только что установил iOs5, и почти все прошло на удивление бегло - но теперь у меня есть странная проблема:

Мое приложение записывает идентификаторы объектов NSManagedObjects в текстовый файл, а затем читаетих снова и создает экземпляры соответствующих объектов из постоянного хранилища.До обновления все работало нормально, и теперь, когда я звоню

[persistentStoreCoordinator managedObjectIdForURIRepresentation:[NSURL URLWithString:objectIdString]]

, я получаю NSInvalidArgumentException - указанный URI находится не в правильной схеме

Поиск этой конкретной причины недопустимого исключения аргумента вообще ничего не дает, а идентификатор объекта - это именно то, что возвращает вызов

[[objectId URIRepresentation]absoluteString]

.И согласно документации Apple, вызов managedObjectIdForURIRepresentation даже не должен вызывать NSInvalidArgumentException , а просто возвращать nil в случае, если что-то не так ...

1 Ответ

1 голос
/ 04 ноября 2011

Хорошо, нашел сам.

Для тех, у кого похожая проблема: основная проблема была не в вызове managedObjectIdForURIRepresentation, а в появившейся objectIdString - хотя InvalidArgumentException не должно вызываться вызовом функции IMHO, как это не указано в документации.

Фактическая проблема еще более странна: objectIdString исходит от URL-адреса, который я получаю, используя схему URL-адреса, которая вызывает

моего приложения.

(BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url

функция. Выбранная запись схемы URL имеет правильный формат, например

appname://x-coredata://objectid

НО : Что я действительно получаю в функции handleOpenURL , так это:

appname://x-coredata//objectid

, в котором явно отсутствует важная деталь: двоеточие после x-coredata !!! И это вызывает сбой ... мне кажется, что это ошибка в handleOpenURL ...

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

...