デバイスのディレクトリパスとNSFileManager
データをどのディレクトリに入れるかを整理する。
・cachesディレクトリ
このディレクトリ下のデータは、アプリがアクティブの時でも削除される可能性がある
・tmpディレクトリ
このディレクトリ下のデータは、 アプリがアクティブの時は保持され続ける
・Documentsディレクトリ
このディレクトリ下のデータは、アプリがアンインストールされない限り保持され続ける
参考 [http://qiita.com/zck/items/9d087d498ce711b22c04:title]
tmpディレクトリまでのパス
NSString *tmpDirPath = NSTemporaryDirectory();
cachesディレクトリまでのパス
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *DocumentsDirPath = [paths objectAtIndex:0];
Documentsディレクトリまでのパス
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cachesDirPath = [paths objectAtIndex:0];
ファイルを保存したり、管理する場合、通常これらどのディレクトリにしても配下に新しいディレクトリを用意して管理することになる。 そこでNSFileManagerを使用して、新しいディレクトリを作り、imageファイルを保存する方法をおさらい
今回は、Documentsディレクトリ配下にsampleDirectoryというディレクトリを作る。
viewdidloardとかに Asset catalogで指定した画像をimageに入れる(Asset catalogに入れた場合、画像は消去してok)
UIImage *image = [UIImage imageNamed: @"dog"]; NSData *imageData = UIImagePNGRepresentation(image);
ディレクトリ作成の前に新しく作るディレクトリまでのpathを取得する。
NSString *newDocumentsDirPath = [DocumentsDirPath stringByAppendingPathComponent:@"sampleDirectory"];
この時点ではまだpathを取得しただけ。実際にディレクトリは存在しない
NSFileManager *fileManager = [NSFileManager defaultManager]; NSError *error = nil; //ディレクトリを作る BOOL created = [fileManager createDirectoryAtPath:newDocumentsDirPath withIntermediateDirectories:YES attributes:nil error:&error]; if(!created){ NSLog(@"作れなかったよ"); }
stringByAppendingPathComponentメソッドを使用して、ディレクトリ配下にdog.igoファイルを追加したpathを取得しwriteToFileメソッドでファイルを書き込む
NSString *filePath = [newDocumentsDirPath stringByAppendingPathComponent:@"dog.igo"]; [imageData writeToFile:filePath atomically:YES]; ```