Чтение и запись NSMutableDictionary в файл plist
Я пытаюсь сохранить NSMutableDictionary
в applicationDidEnterBackground
из AppDelegate.m
в файл plist
. Сразу после сохранения я пытаюсь проверить, существует ли файл, и прочитать его обратно, но файл не найден.
NSString *photoCacheFilename = @"photoCache.plist";
[photoDict writeToFile:photoCacheFilename atomically:YES];
NSLog(@"File name: %@", photoCacheFilename);
BOOL isFile = [[NSFileManager defaultManager] fileExistsAtPath:photoCacheFilename];
if(isFile)
{
NSLog (@"File found");
NSMutableDictionary *newDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:photoCacheFilename];
}
else
{
NSLog (@"File not found");
}
Я изменил код, как предлагали некоторые пользователи, но файл все еще не найден. Я не уверен, правильно ли я проверяю наличие файла.
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];
NSString *photoCacheFilename = [documentsPath stringByAppendingPathComponent:@"photoCache.plist"];
[photoDict writeToFile:photoCacheFilename atomically:YES];
BOOL isFile = [[NSFileManager defaultManager] fileExistsAtPath:photoCacheFilename];
if(isFile)
{
NSLog (@"File found");
NSMutableDictionary *newDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:photoCacheFilename];
}
else
{
NSLog (@"File not found");
}
3 ответа:
Вы не указываете правильный путь к каталогу
Documents
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsPath = [paths objectAtIndex:0]; NSString *photoCacheFilename = [documentsPath stringByAppendingPathComponent:@"photoCache.plist"]; // Correct path to Documents Dir in the App Sand box [photoDict writeToFile:photoCacheFilename atomically:YES]; //Write
Для сохранения данных необходимо указать полный путь:
NSString *myFile = @"myFile.plist"; NSArray *filePaths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [filePaths objectAtIndex:0]; NSString *path = [documentsDirectory stringByAppendingPathComponent:myFile]; [photoDict writeToFile:path atomically:YES];
В SWIFT 3.0
чтобы получить фотокаш.plist путь к файлу, который находится в каталоге документов.
func getPath() -> String { let plistFileName = "photoCache.plist" let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) let documentPath = paths[0] as NSString let plistPath = documentPath.appendingPathComponent(plistFileName) return plistPath }
чтобы проверить, существует ли файл или нет.
let plistPath = self.getPath() if FileManager.default.fileExists(atPath: plistPath) { //File Exists }