Получение постоянных ManagedObjectID для использования с UILocalNotifications - PullRequest
2 голосов
/ 07 сентября 2011

Я ищу несколько советов.

Я использую CoreData с NSFetchedResultsController для отслеживания изменений в модели данных. Когда модель данных изменяется, я использую уведомление fetchedResultsController, чтобы проверить, нужно ли создавать, удалять или обновлять какие-либо UILocalNotifications.

Чтобы соотнести элементы CoreData с элементами UILocalNotifications, я добавляю идентификатор в каждое UILocalNotification. Поскольку UILocalNotifications могут длиться после выполнения приложения, я могу использовать objectID [t.objectID URIRepresentation] в качестве ключа.

Хорошо, так что это в основном работает, но у меня проблема в том, что когда я создаю новый объект и сохраняю его, я получаю обратный вызов в NSFetchedResultsController, что элемент был создан, пока objectID все еще является временным. В следующий раз, когда я услышу об этом объекте, идентификатор объекта теперь является постоянным и не соотносится с исходным (временным) идентификатором.

Любые предложения о том, как справиться с этим? Какой еще идентификатор я могу использовать? Как получить уведомление с постоянным идентификатором при вызове NSFetchedResultsController?

1 Ответ

4 голосов
/ 07 сентября 2011

Постоянный NSManagedObjectID идентифицирует управляемый объект как находящийся в определенном постоянном хранилище. Следовательно, идентификатор объекта не может быть постоянным, пока объект не будет сохранен в хранилище.

Вы можете использовать:

[NSManagedObjectContext obtainPermanentIDsForObjects:error:]  

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

Конечно, самое простое решение - просто сохранить управляемые объекты, прежде чем вы получите их objectID. Если вы хотите, чтобы любой внешний объект ссылался на них, вам все равно нужно это сделать.

...