Архиватор отладки
Я не могу понять, что не так с моим архивированием и разархивированием. Я пытаюсь сохранить данные из класса. Кодером и декодером являются:
//archiving
- (void)encodeWithCoder:(NSCoder *)aCoder
{
//encode only certain instance variables
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeObject:self.location forKey:@"location"];
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [self init];
if (self) {
//decode data
[self setName:[aDecoder decodeObjectForKey:@"name"]];
[self setLocation:[aDecoder decodeObjectForKey:@"location"]];
}
return self;
}
Переменные экземпляра являются свойствами и являются значениями пользовательского класса. Несколько экземпляров этого класса заполняют NSMutableArray, хранящийся в моем главном контроллере представления.
Контроллер моего представления содержит методы:
- (NSString *)itemArchivePath
{
NSArray *documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//only one document in list - get path t o it
NSString *documentDirectory = [documentDirectories objectAtIndex:0];
return [documentDirectory stringByAppendingString:@"file.archive"];
}
- (BOOL)saveChanges
{
//returns success or failure
NSString *path = [self itemArchivePath];
return [NSKeyedArchiver archiveRootObject:customClassArray //This is the array storing multiple instances of the custom class
toFile:path];
}
Комментарий о массиве находится не в самом коде. И, наконец, делегат приложения имеет следующий код:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
BOOL success = [mainViewController saveChanges];
if (success) {
NSLog(@"Saved Successfully!");
}
else {
NSLog(@"Unsuccessful");
}
}
К сожалению, всякий раз, когда запускается код, "неудачно" всегда регистрируется, и я не уверен, почему. MainViewController - это переменная экземпляра делегата приложения. Я пытался отлаживать в течение очень долгого времени, и я не могу найти проблему. Любая помощь приветствуется. Спасибо!
1 ответ
Есть хороший шанс, что path
на который вы пытаетесь спасти, недействительно. Вы должны попытаться зарегистрировать его и посмотреть, является ли значение нормальным, когда сохранение не удается. Вы также можете посмотреть на использование stringByAppendingPathComponent:
вместо stringByAppendingString:
,