Проблема не в том, чтобы поместить объект в словарь;проблема заключается в записи его в файл.
Ваш пользовательский класс должен быть serializable .Вам необходимо реализовать протокол NSCoding
, чтобы Cocoa знала, что делать с вашим классом, когда вы просите записать его на диск.
Это довольно просто сделать;вам нужно реализовать два метода, которые будут выглядеть примерно так:
- (id)initWithCoder:(NSCoder *)coder {
self = [super init];
// If inheriting from a class that implements initWithCoder:
// self = [super initWithCoder:coder];
myFirstIvar = [[coder decodeObjectForKey:@"myFirstIvar] retain];
mySecondIvar = [[coder decodeObjectForKey:@"mySecondIvar] retain];
// etc.
return self;
}
- (void)encodeWithCoder:(NSCoder *)coder {
// If inheriting from a class that implements encodeWithCoder:
// [super encodeWithCoder:coder];
[coder encodeObject:myFirstIvar forKey:@"myFirstIvar"];
[coder encodeObject:mySecondIvar forKey:@"mySecondIvar"];
// etc.
}
По сути, вы просто перечисляете ивары, которые необходимо сохранить, и затем читаете их обратно правильно.
ОБНОВЛЕНИЕ: Как упомянул Eimantas, вам также понадобится NSKeyedArchiver
.Для сохранения:
NSData * myData = [NSKeyedArchiver archivedDataWithRootObject:myDict];
BOOL result = [myData writeToFile:[self dataFilePath] atomically:YES];
Для перезагрузки:
NSData * myData = [NSData dataWithContentsOfFile:[self dataFilePath]];
NSDictionary * myDict = [NSKeyedUnarchiver unarchiveObjectWithData:myData];
Я думаю, что должно это сделать.