0

我们正在使用 Xamarin.Mobile 组件在本地应用程序目录中拍摄和存储照片。现在,当我存储单张照片时它工作正常,但如果我存储多张照片并尝试访问这些照片,只有最后一张图像存在,所有其他图像都将被删除。我不在我的代码中的任何地方调用删除函数。

我们正在为 iOS 和 android 制作应用程序,并且我们有一些在两个项目中链接的核心类

当它进入函数时如图所示是最后一个调用堆栈,只有最后一个图像存在,所有其他图像都被删除。前三个函数来自我们在 iOS 和 Android 中链接的核心类。

我启用了 iTunes 文件共享,图像存储在 Documents 文件夹中,并且我给每个图像一个不同的名称。

这是拍照的代码: Random rand1 = new Random((int) DateTime.Now.Ticks & 0x0000FFFF);

        picker = new MediaPicker();
        if( !picker.IsCameraAvailable )
            return;
        MediaPickerController controller = picker.GetTakePhotoUI (new StoreCameraMediaOptions {
            Name = "Ticket"+rand1.Next(1, 1000000)+".jpg",
            Directory = ""
        });
        this.PresentViewController( controller, true, null );
        controller.GetResultAsync().ContinueWith (t => {
            // We need to dismiss the controller ourselves
            this.PresentedViewController.DismissViewController (true, () => {
                // User canceled or something went wrong
                if (t.IsCanceled || t.IsFaulted)
                    return;

                // We get back a MediaFile
                MediaFile media = t.Result;



                ticket.imagePaths.Add( media.Path );

            });
        }, uiScheduler); 

这是我的应用程序输出:2014-01-15 15:17:40.445 CCR_Ticket_System_iOS[2063:60b] TicketRepo 中存在文件:/private/var/mobile/Applications/ABE44A50-7119-4BF9-8DF9-DC50C80E7591/Documents/Ticket235666。 jpg 2014-01-15 15:17:42.384 CCR_Ticket_System_iOS[2063:60b] TicketRepo 中存在文件:/private/var/mobile/Applications/ABE44A50-7119-4BF9-8DF9-DC50C80E7591/Documents/Ticket952511.jpg 2014-01- 15 15:17:49.320 CCR_Ticket_System_iOS[2063:60b] 文件在 DatabaseADO 的 SaveTicket 中不存在:/private/var/mobile/Applications/ABE44A50-7119-4BF9-8DF9-DC50C80E7591/Documents/Ticket235666.jpg 2014-01- 15 15:17:49.323 CCR_Ticket_System_iOS[2063:60b] 文件存在于 DatabaseADO 的 SaveTicket 中:/private/var/mobile/Applications/ABE44A50-7119-4BF9-8DF9-DC50C80E7591/Documents/Ticket952511.jpg

请让我知道我做错了什么。如果您需要更多信息,请告诉我。在过去的两天里,我一直在这个问题上。

4

1 回答 1

0

我自己也遇到了这个问题,发现还没有发布解决方案。这是我发现的:

问题与 MediaPicker 有关。当 mediaPicker.PickPhotoAsync()、mediaPicker.TakePhotoAsync() 等被调用时,它返回一个 MediaFile 类型的对象。这个 MediaFile 有一个名为“Path”的属性,其中包含一个带有文件路径的字符串。我们存储此字符串以供以后使用。

当我们意识到 MediaPicker 是如何实现的时,问题就出现了。一旦 MediaFile 被释放,它就会删除与 MediaFile 关联的文件。由于我们让 MediaPicker 超出范围,因此文件在添加到列表后立即被删除。

有几个解决方案:1)保留对 MediaFile 的引用,直到不再需要该文件。2) 将图像复制到新位置,以便可以处理 MediaFile

我个人认为选项 1 是一个更好的解决方案。

于 2015-08-28T16:08:28.280 回答