我在iPhone 6s上测试我的应用程序。这个问题已在这里提出,但推荐的解决方案似乎对我不起作用。我正在使用Monotouch(c#)。
我保存了这样的图像:
var documentsDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
string jpgFilename = System.IO.Path.Combine(documentsDirectory,"photo.jpg");
NSData imgData = image.AsJPEG();
NSError err = null;
if (imgData.Save(jpgFilename, false, out err))
{
userProfile.ImageFilePath = jpgFilename;
Console.WriteLine("saved as " + jpgFilename);
}
else {
Console.WriteLine("NOT saved as" + jpgFilename + " because" + err.LocalizedDescription);
}
然后在另一个ViewWillAppear
的{{1}}中,我尝试加载它:
UIViewController
不幸的是,重新安装应用后,我的var documentsDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
string localFile = System.IO.Path.Combine(documentsDirectory, "photo.jpg");
UIImage savedImage = UIImage.FromFile(localFile);
if (savedImage != null)
{
imgPhoto.Image = savedImage;
}
始终为空。在调试模式下测试。
任何人都知道Xamarin.iOS的解决方案吗?
修改
我了解到我不应该将绝对路径保存到我的app数据目录。我应该只保存相对路径(相对于应用程序的目录)。问题是应用程序的路径(GUID)每次都会更改。因此图像为空,因为它已被移动。
所以每次重新安装应用程序时,路径中的GUID都不同。
savedImage
如何保存正确的相对路径?
答案 0 :(得分:2)
你提出的问题是不可能的。在调试会话之间卸载应用程序时,application sandbox将被移除,如上所述here。
如果您另一方面没有在调试会话之间卸载应用程序,那么您在Environment.SpecialFolder.Personal
中存储的数据仍然可用。
作为一个注释,正如您自己观察到的那样,应用程序沙箱的GUID会在调试会话之间发生变化。内容虽然只是复制到新目录。这意味着您不会在会话之间丢失数据。
相反,您应该考虑使用Document Storage for iCloud。这将允许您将数据保存到iCloud,卸载应用程序,并在应用程序再次安装后最后加载给定的数据。
虽然,如果您决定使用此方法,则会提到一些要求here。