Не удается сохранить NSDictionary в файл

#iphone #nsdictionary #writetofile

#iPhone #nsdictionary #запись в файл

Вопрос:

я думаю, название говорит само за себя. Я использую некоторый пример кода, который я нашел здесь, но файл не будет создан.

 - (id)init {
    [[NSBundle mainBundle] loadNibNamed:@"PadContent" owner:self options:nil];

    if ([[NSFileManager defaultManager] fileExistsAtPath:[self filePathOfBookmarks]]) {
        bookmarks = [[NSMutableDictionary alloc] 
                      initWithContentsOfFile:[self filePathOfBookmarks]];
    } else {
        bookmarks = [[NSMutableDictionary alloc] init];
        NSLog(@"file does not exist");
    }
    return self;
}

- (void)addBookmark:(id)sender{
    [bookmarks setObject:[dataInstance chapter] forKey:[[dataInstance chapter]title]];
    [bookmarks setObject:[dataInstance chapter] forKey:@"test"];
    NSLog(@"count: %d", [bookmarks count]);
    NSLog([self filePathOfBookmarks]);
    [bookmarks writeToFile:[self filePathOfBookmarks] atomically:YES];
}

- (NSString *) filePathOfBookmarks {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docDirectory = [paths objectAtIndex:0];
    return [docDirectory stringByAppendingPathComponent:@"bookmarks"];
}
  

Ответ №1:

Что в вашем словаре? Существуют только определенные базовые объекты, которые можно записывать и считывать обратно без какой-либо дополнительной работы с вашей стороны. Если ваш словарь включает пользовательский объект, который вы определили, вам нужно будет использовать другой механизм для записи и обратного чтения данных, такой как NSArchiver. Я предполагаю, что все, что [dataInstance chapter] дает, не относится к этим базовым типам объектов.

Типы данных, которые можно считывать и записывать автоматически, см. в документации к NSDictionary writeToFile:atomically: . Также посмотрите на NSArchiver и протокол NSCoding.

Комментарии:

1. Это может быть причиной! Chapter — это класс, созданный самостоятельно.