2010-11-20 4 views
1

У меня есть словарь (это изменчиво, если это имеет значение), которое содержит nsarrays, которые, в свою очередь, содержат (подкласс NSObject) s Я реализовал initWithCoder и encodeWithCoder так:Сохранение NSDictionary из NSArrays обычая объектов

-(id)initWithCoder:(NSCoder *)aDecoder { 
    self = [super init]; 
    self.Title = [aDecoder decodeObjectForKey:@"Title"]; 
    self.SiteAPIURL = [aDecoder decodeObjectForKey:@"SiteAPIURL"]; 
    self.ID = [aDecoder decodeObjectForKey:@"ID"]; 
    return self; 
} 

-(void) encodeWithCoder:(NSCoder *)aCoder { 
    [aCoder encodeObject:self.Title forKey:@"Title"]; 
    [aCoder encodeObject:self.SiteAPIURL forKey:@"SiteAPIURL"]; 
    [aCoder encodeObject:self.ID forKey:@"ID"]; 
} 

Но это не спасает должным образом, когда я [dictionary writeToFile:savepath atomically:YES]; Так что я делаю не так, и что именно сериализации и мне нужно, мне нужно использовать NSKeyedArchiver или что-то?

+0

Вы могли понять это? У меня такая же точная структура данных (разные пользовательские объекты в массиве, конечно), и я пытался реализовать сохранение моего словаря на пару дней. Я также реализовал initWitCoder и encodeWithCoder в классе объектов, и я попытался использовать UserDefaults и plists, но я не могу заставить их работать. Любая помощь ценится! – RyanG

+0

@Ryan, вам нужно использовать NSKeyedArchiver и NSCoding Protocol, см. Принятый ответ и документы Apple. –

ответ

2

[NSDictionary writeToFile: atomically:] использует NSPropertyListSerialization, который может записывать только подмножество примитивных объектов (чисел , строки, даты и данные). Поэтому, хотя вы можете использовать NSCoding вместе с NSKeyedArchiver для архивирования объектов, еще один вариант - маршалировать ваши объекты в строку или представление данных, сохраните , что в списке свойств, и отмените их снова при загрузке.