我的应用程序旨在从用户视频制作缩略图,并将这些缩略图保存在应用程序文档目录中,以便以后在UICollectionView中使用。但是,似乎图像仅暂时保存,因为重新启动应用程序时无法访问这些图像。我做错了什么?
我正在使用许多之前的SO帖子中的代码,例如:Storing images locally on an iOS device所以我不确定我引入了什么错误。
我正在保存从用户录制的视频中删除的缩略图,如下所示:
NSArray *paths2 = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
NSURL *documentsDirectory = [paths2 lastObject];//[self documentsDirectoryURL];
NSString *prefixString = @"IdlingVideo";
NSString *guid = [[NSProcessInfo processInfo] globallyUniqueString] ;
NSString *uniqueFileName = [NSString stringWithFormat:@"%@_%@.png", prefixString, guid];
NSURL *saveLocation = [documentsDirectory URLByAppendingPathComponent:uniqueFileName];
NSString *imagePath =saveLocation.path;
[UIImagePNGRepresentation(newImage) writeToURL:saveLocation atomically:YES];
NSURL *filePathCompressed = [[NSURL alloc] initFileURLWithPath: imagePath];
我也试过这个:
NSArray *paths2 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths2 objectAtIndex:0];
在这两种情况下,当我运行应用程序时,一切正常。缩略图似乎已保存并显示在我的UICollectionView
中。我还在创建UICollectionViewCell
:
if ([fileManager fileExistsAtPath:self.complaint.thumbnailURL.path]){
NSLog(@"file exists at path %@", self.complaint.thumbnailURL.path);
}else{
NSLog(@"file DOES NOT EXIST at path %@", self.complaint.thumbnailURL.path);
}
根据需要,此输出"文件存在"当我在用户拍照后立即查看UICollectionView
时。所以一切都在一次会议中运作良好。但是,当用户重新启动应用程序时,图像会丢失。重新启动应用程序时,文件似乎丢失。 UICollectionViewCell
中没有图像,记录器表示该文件不存在。
我做错了什么?
答案 0 :(得分:0)
根据Apple's documentation,文档目录的内容将一直存在,直到应用程序显式删除它们为止。
下面的代码是我一直使用的代码,用于获取文档目录的路径。因此,您似乎正在正确访问文档目录。
+ (NSString *) applicationDocumentsDirectory
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
return basePath;
}
您的代码中某处显式删除文档目录的内容的可能性非常高。
removeItemAtPath:
”在项目中执行全局搜索。这是与NSFileManager
一起使用的方法,用于删除指定路径下的文件。removeItemAtPath:
搜索文本,请在该行添加断点。或者
appDidFinishLaunching
方法。