重新安装应用程序后,UIImage始终返回null

时间:2017-01-15 23:12:12

标签: c# xamarin.ios

我在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

如何保存正确的相对路径?

1 个答案:

答案 0 :(得分:2)

你提出的问题是不可能的。在调试会话之间卸载应用程序时,application sandbox将被移除,如上所述here

如果您另一方面没有在调试会话之间卸载应用程序,那么您在Environment.SpecialFolder.Personal中存储的数据仍然可用。

作为一个注释,正如您自己观察到的那样,应用程序沙箱的GUID会在调试会话之间发生变化。内容虽然只是复制到新目录。这意味着您不会在会话之间丢失数据。

使用iCloud文档存储

相反,您应该考虑使用Document Storage for iCloud。这将允许您将数据保存到iCloud,卸载应用程序,并在应用程序再次安装后最后加载给定的数据。

虽然,如果您决定使用此方法,则会提到一些要求here