Я знаю, что есть много сообщений, касающихся проблемы архивации пользовательских объектов в NSArray или NSMutableArray и сохранения их в NSUserDefaults.Соответствие протоколу NSCoding и сохранение в NSUserDefaults не является проблематичным, и я довольно часто использую NSUserDefaults для хранения пользовательских данных в моем приложении - в основном это объекты, представляющие Person (давайте назовем подкласс NSObject «Person»), который можетиметь несколько объектов подкласса NSObject «Свойство», хранящихся в NSMutableArray.Поэтому структура данных выглядит следующим образом:
NSMutableArray "persons":
Person "aPerson":
NSMutableArray "properties":
Property "aProperty"
Property "anotherProperty"
Person "anotherPerson:
...
Архивирование и восстановление информации поначалу не было проблематичным, поскольку и Person, и Property соответствуют протоколу NSCoding - но теперь возникла проблема, которую я не смогрешить еще, несмотря на тысячи запросов Google за последние пару дней;)
Некоторые из объектов Property содержат ссылки на других Persons («Участники», которые связаны с тем же свойством и содержатся в NSMutableArray).).Когда я сохраняю все данные в NSUserDefaults с помощью NSKeyedArchiver, я использую
[aCoder encodeObject:participants forKey:@"participants"];
в методе Property «encodeWithCoder» для архивирования «участников» NSMutableArray, в котором хранятся ссылки на другие объекты Person.Но когда я декодирую эти объекты Person, они создаются новыми и отделяются от объектов Person, которые уже существуют где-то еще.NSMutableArray «участники» содержит только ссылки , слабые ссылки на объекты Person и поэтому должны условно кодировать его содержимое, как это можно сделать с другими объектами вручную в «encodeWithCoder»:
[aCoder encodeConditionalObject:anObject forKey:aKey];
Когда NSMutableArray будет декодирован, он должен представлять список ссылок на уже существующие объекты Person - не полностью новые!Тест "aPerson == [[aDecoder decodeObjectForKey: @" members "] objectAtIndex: 0]" в настоящее время возвращает NO, хотя он вернул YES до того, как произошел процесс кодирования / декодирования.
Я надеюсь, что мое объяснениекак-то понятно, и вы можете помочь мне с моей проблемой :) Простыми словами: как я могу условно кодировать пользовательские объекты, содержащиеся в NSMutableArray?
Спасибо!