NSManagedObject как ключ NSDictionary?

Попробуйте csplit (1) для вырезания объема производства в отдельные таблицы на основе регулярных выражений (соответствие границе таблицы, я думал бы).

19
задан Mike Abdullah 26 July 2012 в 09:06
поделиться

3 ответа

Есть четыре варианта:

  1. Вместо этого использовать другой объект в качестве ключа словаря и выполнять поиск по нему. [идентификатор объекта] или + [NSValue valueWithNonrehibitedObject:] кажутся наиболее очевидными
  2. Используйте CFDictionaryCreateMutable () , чтобы создать словарь с сохраненным вместо копирования, а затем вызовите CFDictionarySetValue () для хранения объектов
  3. В OS X или iOS6 +, [NSMapTable mapTableWithStrongToStrongObjects] дает вам чисто Objective -C эквивалентно CFMutableDictionary
  4. Реализовать NSCopying для подкласса управляемого объекта, чтобы он возвращал self (с увеличенным количеством ссылок, если вы не используете ARC)

Примечания

+ valueWithNonreolatedObject: довольно опасно, так как можно оставить висящий указатель; вероятно, лучше всего этого избегать.

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

Реализация NSCopying кажется немного неприятной, но должна работать нормально. Как оказалось, это именно тот подход NSURLSessionTask , я полагаю, для удобства использования словарей.

До OS X 10.8 Mountain Lion, раньше было возможно создать обычный NSMutableDictionary , а затем вызвать для него CFDictionarySetValue () . Однако это уже не так; новые словари теперь имеют правильные обратные вызовы копирования, указанные на уровне CF, а не являются чисто функцией NSMutableDictionary .

33
ответ дан 30 November 2019 в 03:53
поделиться

Я предлагаю использовать [[myManagedObject objectID] URIRepresentation] absoluteString] в качестве ключа.

0
ответ дан 30 November 2019 в 03:53
поделиться

Вы можете сделать его самостоятельно за 20 секунд. Например, в C #
- Create a new WinForms application
- Create a new SqlConnection(connectionString)
- Exception => Bad connection string
который содержит ссылку на экземпляр NSManagedObject, который вы хотите использовать в качестве ключа словаря? Затем вы можете заставить этот класс-оболочку реализовывать NSCopying вместе с хеш-методом (возможно, просто вызывая хеш-метод NSManagedObject) и использовать эту оболочку как ключ словаря.

0
ответ дан 30 November 2019 в 03:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: