#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) {
}