Архиватор отладки

Я не могу понять, что не так с моим архивированием и разархивированием. Я пытаюсь сохранить данные из класса. Кодером и декодером являются:

//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:,

Другие вопросы по тегам