Как проверить наличие элемента в NSSet или NSCountingSet? - PullRequest
0 голосов
/ 23 мая 2009

В настоящее время я заполняю объекты модели в NSSet (возможно, мне следует использовать NSCountingSet). Модели должны быть уникальными. Что я делаю, это извлекаю их из веб-службы, а затем создаю их экземпляры на стороне клиента и добавляю их в набор.

Моя проблема заключается в следующем: бывают случаи, когда я беру только одну модель и добавляю ее в комплект, например, говорю, что у меня есть инвентарь Ferrari. Поэтому я попрошу свой сервер вытащить меня в один конкретный Ferrari, потому что человек нажимает на подробный вид этого Ferrari из инвентаря. В отдельном подробном представлении Ferrari будут перечислены все различные краски, доступные для этой модели. Поэтому, как только пользователь выполнит сверление с этим видом Ferrari, я попрошу у сервера все краски, доступные для конкретной модели Ferrari.

Затем пользователь отступает и затем обращается к контроллеру представления, который запрашивает все цвета краски, которые я имею для каждого транспортного средства. У меня уже есть краски Ferrari, доступные в тайнике. Теперь я прошу ВСЕ краски с сервера. Как лучше объединить существующие краски со всеми красками без дублирования ресурсов?

Ответы [ 2 ]

2 голосов
/ 23 мая 2009

Вам нужен способ уникальной идентификации каждого объекта с сервера. В базе данных объект (часть или целое) может быть представлен в виде строки, а rowid обычно представляет собой монотонно увеличивающееся целое число (хотя ваш источник данных может использовать что-то еще). В любом случае сохраняйте этот уникальный идентификатор в каждом создаваемом вами объекте, и перед созданием нового объекта проверьте наличие объекта с таким идентификатором. Если объект уже существует, вернуть существующий объект, а если его нет, создать новый объект и затем сохранить его в кеше. Использование целых чисел в качестве идентификаторов работает хорошо, потому что вы можете использовать NSMapTable в качестве кэша с rowids в качестве ключей, а значения являются указателями объектов.

0 голосов
/ 23 мая 2009

Поддерживайте NSArray* в вашем приложении, которое хранит NSString* объекты на основе некоторых хеш-функций ваших функций:

hashValue = hash(color + horsepower + leatherSeating + whatever...)

Например, вы можете взять хэш SHA1 сопоставленной строки ( пример кода ).

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

Найдите в хеш-таблице вашего приложения значение веб-службы, используя -containsObject:.

Если возвращается YES, выполните X , в противном случае сделайте Y .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...