Как загрузить NSDictionary из файла, созданного с помощью writeToFile?

#objective-c #nsdictionary #nsmutabledictionary

#objective-c #nsdictionary #nsmutabledictionary

Вопрос:

У меня есть NSMutableDictionary, и я написал его с помощью

 [stuff writeToFile:@"TEST" atomically:YES];
  

Как я могу получить его в будущем?

Кроме того, что произойдет, если я решу заменить свой iPhone 4 на 4S? Можно ли перенести часть моих записанных данных?

Ответ №1:

РЕДАКТИРОВАТЬ в 2022/03: изменен initWithContentsOfFile на initWithContentsOfFile

Я думаю, вы хотите что-то вроде:

 [[NSMutableDictionary alloc] initWithContentsOfFile:[self dataFilePath]];
  

Вам действительно необходимо получить правильный путь для хранения и извлечения вашего файла в соответствии с этой процедурой:

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

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

1. Возможно, это, но я получаю «null».

2. Задаете ли вы путь к данным вашего файла? Я предполагал, что вы рассмотрели эту часть, но вам нужно получить правильный путь для вашего файла. Я добавил некоторый код, который вы можете использовать.

Ответ №2:

Сначала вам нужно определить путь для записи. Если вы используете [stuff writeToFile:@"TEST" atomically:YES]; в симуляторе iPhone, он запишет файл с именем TEST в ваш домашний каталог вашего Mac. Используйте этот код для сохранения в папку Documents в симуляторе и на iPhone

 NSArray *path = NSSearchPathForDirectoriesInDomains(
            NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDirPath = [path objectAtIndex:0];
  

Вот код, необходимый для чтения и записи файлов.

 -(void)writeFileToDisk:(id)stuff
{
    NSArray *path = NSSearchPathForDirectoriesInDomains(
            NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDirPath = [path objectAtIndex:0];
    NSString *fileName = @"TEST";

    NSString *fileAndPath = [documentDirPath stringByAppendingPathComponent:fileName];

    [stuff writeToFile:fileAndPath atomically:YES];
}

-(void)readFileFromDisk
{
    NSArray *path = NSSearchPathForDirectoriesInDomains(
            NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDirPath = [path objectAtIndex:0];
    NSString *fileName = @"TEST";

    NSString *fileAndPath = [documentDirPath stringByAppendingPathComponent:fileName];

    NSArray *stuff = [[NSArray alloc] initWithContentsOfFile:fileAndPath];
    NSLog(@"%@",stuff);
    [stuff release];
}
  

Ответ №3:

Вы можете использовать NSUserDefaults для хранения вашего словаря следующим образом:

 [[NSUserDefalts standardUserDefaults] setObject:myDictionary forKey:@"myKey"];
  

И позже вы можете получить его следующим образом:

 [[NSUserDefalts standardUserDefaults] objectForKey:@"myKey"];
  

Также ничего не произойдет, если вы используете тот же код с iPhone 4 или iPhone 4S.

Ответ №4:

Быстрое решение

 let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let filePath = (documentsPath as NSString).stringByAppendingPathComponent("data.txt")

if let data = NSDictionary(contentsOfFile: filePath) {
}