В основном я использую некоторый открытый исходный код под названием OrderedDictionary, который является производным от NSMutableDictionary. Затем я хочу сохранить упорядоченные словарные данные в NSUserDefaults, добавив метод кодирования и декодирования в класс OrderedDictionary. Однако я понял, что методы кодирования и декодирования не вызываются, в результате декодированный словарь больше не упорядочивается. Ниже мой код:encodeWithCoder не вызывается в производном классе NSMutableDictionary
@interface OrderedDictionary : NSMutableDictionary <NSCopying, NSCoding>
{
NSMutableDictionary *dictionary;
NSMutableArray *array;
}
В файле реализации:
/**
* encode the object
**/
- (void)encodeWithCoder:(NSCoder *)coder
{
[super encodeWithCoder:coder];
[coder encodeObject:dictionary forKey:@"dictionary"];
[coder encodeObject:array forKey:@"array"];
}
/**
* decode the object
*/
- (id)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
if (self != nil)
{
dictionary = [coder decodeObjectForKey:@"dictionary"];
array = [coder decodeObjectForKey:@"array"];
}
return self;
}
Быстрый пример кода для использования этого:
dictionary = [[OrderedDictionary alloc] init];
[dictionary setObject:@"one" forKey:@"two"];
[dictionary setObject:@"what" forKey:@"what"];
[dictionary setObject:@"7" forKey:@"7"];
NSLog(@"Final contents of the dictionary: %@", dictionary);
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"myDictionary"] == nil)
{
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:dictionary]
forKey:@"myDictionary"];
}
else
{
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *savedDictionary = [currentDefaults objectForKey:@"myDictionary"];
if (savedDictionary != nil)
{
OrderedDictionary *oldData = [NSKeyedUnarchiver unarchiveObjectWithData:savedDictionary];
if (oldData != nil)
{
NSLog(@"Final contents of the retrieved: %@", oldData);
}
}
}
Дело в том, окончательное retrievedDictionary не имеет оригинал порядок данных и методы кодирования и декодирования вообще не вызываются.
Спасибо за любую помощь заранее! :)
Я подозреваю, что нет никакого способа, чтобы исправить это, то мы не можем быть в состоянии назвать кодирования и декодирования методов класса ребенка в NSMutableDictionary .... – trillions