Во-первых, вы не должны использовать метод encodeRootObject
. Это устаревший метод, определенный в NSCoder
для поддержки устаревших неключевых архиваторов, и может быть декодирован только с использованием decodeObject:
. Вы используете только пару encodeObjectForKey:
и decodeObjectForKey:
.
Итак,
id decodedEntity = [bua decodeObjectForKey:@"root"];
должно быть
id decodedEntity = [bua decodeObjectForKey:@"testKey"];
Если вы хотите расшифровать весь словарь, вместо
[ba encodeRootObject:dict];
сделать
[ba encodeObject:dict forKey:@"root"];
Кстати, для простых целей часто достаточно использовать NSUserDefaults
, который автоматически заботится о создании файла для записи, записи объектов в файл и чтении его при следующем запуске программы.
Если вам просто нужно закодировать словарь, обычно достаточно использовать NSPropertyListSerialization
.
Если вы используете NSKeyedArchiver
и NSKeyedUnarchiver
, я рекомендую вам следовать практике и написать encodeWithCoder:
и initWithCoder:
для объекта.