Мой клиент для iPhone активно работает с асинхронными запросами, постоянно изменяя статические коллекции словарей или массивов. В результате я часто вижу большие структуры данных, для которых требуется больше времени для извлечения с сервера, со следующими ошибками:
*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <NSCFArray: 0x3777c0> was mutated while being enumerated.'
Обычно это означает, что два запроса к серверу возвращаются с данными, которые пытаются изменить одну и ту же коллекцию. Я ищу учебник / пример / понимание того, как правильно структурировать мой код, чтобы избежать этой пагубной ошибки. Я верю, что правильный ответ - мьютексы, но лично я их еще никогда не использовал.
Это результат выполнения асинхронных HTTP-запросов с помощью NSURLConnection, а затем использования NSNotification Center в качестве средства делегирования после завершения запросов. При запуске запросов, которые изменяют одни и те же наборы коллекций, мы получаем эти коллизии.