iOS NSKeyedArchiver - NSMutableDictionary возвращается как NSPlaceholderDictionary?

У меня есть большой и сложный объектный граф. Я реализовал NSCoding для архивации и разархивирования графа объекта. Обычно все работает нормально. Но при определенных очень воспроизводимых обстоятельствах архив NSMutableDictionary, который я заархивирую, разархивируется как NSPlaceholderDictionary. Это частный подкласс NSMutableDictionary и представляет собой неинициализированный словарь. Он не отвечает ни на один из обычных методов NSDictionary.

Мне интересно, сталкивался ли кто-нибудь с подобной проблемой. Если так, смогли ли вы решить это? И как?

РЕДАКТИРОВАТЬ: Одна вещь, которую я могу сказать об обстоятельствах, это то, что сам словарь глубоко вложен, с большим количеством содержащихся словарей и массивов. И глубоко внутри это указатель на другой объект, который находится в процессе создания. Граф объектов - это дерево. Большинство объектов в дереве содержат слабые ссылки на своих родителей. Проблема возникает в n слоях глубоко в дереве. Во время сбоя стек выглядит примерно так: я упростил это:

0. crash because dictionary is a placeholder
1. depth n initWithCoder -- decode a deep and large dictionary which, prior to encoding contained reference to object at depth n+4.  Said object has not yet been decoded.
2. Apple methods 
3. depth n+1 initWithCoder -- decode reference to parent
4. 38 frames of apple methods for very deeply nested dictionary
5. depth n-1 initWithCoder -- decode a deeply nested dictionary.  Among other things, the dictionary contains a reference to the level n+1 object [inside a lot of nested dictionaries and arrays]
6. Apple methods
7. depth n-2 object initWithCoder -- decode reference to array containing its children

0 ответов

Другие вопросы по тегам