更新应用程序时,所有本地文件都将在iPhone中删除

时间:2013-07-09 10:57:06

标签: ios objective-c

在我的应用程序中,我已将文档目录中的视频和照片以及照片和视频保存在sqlite中的路径存储中。在更新(升级)iPhone应用程序时,所有文档目录照片和视频都将被删除。但是存储在sqlite中的其他参数未被删除。如何在更新应用程序时保留文件?

- (BOOL)saveImageToDocumentDirectory:(的UIImage *)imgToBeSaved {     BOOL标志= NO;

strPhotourl=nil;

NSData* imgData = UIImageJPEGRepresentation(imgToBeSaved, 1.0);

// NSData * imgData1 = UIImagePNGRepresentation(imgToBeSaved);

// Create a new UUID
CFUUIDRef uuidObj = CFUUIDCreate(nil);

// Get the string representation of the UUID
NSString *strImageName = (__bridge NSString*)CFUUIDCreateString(nil, uuidObj);

CFRelease(uuidObj);

//Call Function to save image to document directory

NSArray* arrAllDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString* strDocumentDirectory = [arrAllDirectories objectAtIndex:0];

NSFileManager* fileManager = [NSFileManager defaultManager];

NSString *fullPath = [strDocumentDirectory stringByAppendingPathComponent:[strImageName stringByAppendingString:@".png"]];

strPhotourl=fullPath ;// strPhotourl store in sqlite db table two show images in  tableview

//    NSLog(@"Image in strphotolocation==%@",imagePath);

// NSLog(@“fullpath ---%@”,fullPath);

if(![fileManager fileExistsAtPath:fullPath])
    flag =     [fileManager createFileAtPath:fullPath contents:imgData attributes:nil];
else
    flag = NO;
return flag;

}

2 个答案:

答案 0 :(得分:5)

原因不是因为删除了任何文件,而是因为升级过程中iOS应用程序所在的文件夹确实会更改。存储应用程序的文件夹是使用GUID命名的,升级时可能会更改。

您不应将完整的URL / PATH存储到Documents文件夹中的任何文件,因为升级后无法保证这一点。

  

在应用更新期间保存的文件

     

当用户下载应用更新时,   iTunes将更新安装在新的app目录中。它然后移动   用户从旧安装到新应用程序的数据文件   删除旧安装之前的目录。文件如下   保证在更新过程中保留目录:

     
      
  • APPLICATION_HOME /文件
  •   
  • Application_Home / Library
  •   
     

虽然是文件   在其他用户目录中也可以移动,你不应该依赖   他们在更新后出现。

https://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTuning/PerformanceTuning.html

如果您已经在用户手机上部署了应用程序,那么您可以做的是当您从sqlite读取网址时,删除主要路径(例如:/ var / mobile / Applications / --- guid --- /文件)然后在使用之前重新保存该条目。

答案 1 :(得分:1)

不要将整个路径保存到sqlite中,只需保存存储在本地的文件名,这样在获取时,获取当前目录路径并从sqlite追加fileName。这也将在您升级应用时解决。