加载用户图像在模拟器中工作,但不在iPhone Xcode 6 Swift上

时间:2015-01-12 15:45:26

标签: ios iphone uiimageview uiimage

我正在尝试在我的应用中加载(和上传)图片(按照图片路径)。 这在我的模拟器中工作。一切都在那里工作只有当我试图在iphone上做这件事时它才行不通,我只看到空的UIImageviews。

路径的加载方式与模拟器中的相同。源于:

  PHImageManager.defaultManager().requestImageDataForAsset(asset, options: nil)
            {
                imageData,dataUTI,orientation,info in

                cell.setString(info["PHImageFileSandboxExtensionTokenKey"] as String,name:dataUTI as String)
             }

加载图像时,PHImageFileSandboxExtentionTokenKey被拆分为数据和URL。 这导致模拟器为:

/Users/Twizzler/Library/Developer/CoreSimulator/Devices/3E671415-8B83-44DA-870F-19BF2BC11F8F/data/Containers/Data/Application/8872109F-3784-40EB-BEB6-4E9FDABE013D/Documents/1613945_10200645161051698_4122753901212984922_n.jpg

在iphone中:

/private/var/mobile/Media/DCIM/102APPLE/IMG_2607.JPG

我正在加载图像:

  let image = UIImage(named: "/private/var/mobile/Media/DCIM/102APPLE/IMG_2607.JPG")
        cell.imageView.image = image

在这种情况下我把图片网址硬编码(这是在最终应用程序中的图像数组)

我没有收到错误或堆栈跟踪。在放置断点时,我会以与模拟器相同的方式查看图像信息

正如我现在尝试加载它们的答案所建议的那样:

 let image = UIImage(contentsOfFile: "/private/var/mobile/Media/DCIM/102APPLE/IMG_2607.JPG")
        cell.imageView.image = image

这不起作用,我无法上传文件

3 个答案:

答案 0 :(得分:0)

这不是imageNamed的工作方式 - 正如文档所述,它会在应用程序包中查找具有给定名称的图像。试试imageWithContentsOfFile

答案 1 :(得分:0)

我修好了!经过一些令人费解的日子后我现在用这种方式来访问上传和 cell.imageView.image = UIImage(data: array[indexPath.row][0] as NSData) 这显示了图像。我可以将NSData保存在CoreData中并以这种方式重新加载图像。

使用以下方法减轻系统上的负担:

cellData.checked = 1
            var imageData = UIImageJPEGRepresentation(cell.imageView.image, 1)
            self.array.append([imageData,cellData.imageData] )

            let myObj : ViewControllerImagePicker = self.parentViewController as ViewControllerImagePicker
            let textfield: UILabel = myObj.amountLabel! as UILabel
            textfield.text = String(self.array.count )
            cell.textLabel.alpha = 1

单击单元格时会调用此代码。通过设置cellData.imageData我可以调用单元格(当点击回到集合视图时)

由于数据使用问题,我不知道我这样做的方式是正确的还是可以使用10个以上的文件。但在我的情况下,最多可选择6张图片,它就像魅力一样

答案 2 :(得分:0)

当涉及到文件,应用程序包和沙盒时,模拟器的工作方式与真实设备完全不同。

对于初学者,模拟器将允许您在应用包中写入,添加或更改文件。在真实设备上运行的iOS不允许你这样做。

您无法对应用中的任何路径进行硬编码。即使它今天或在您的设备上以测试模式运行,但这并不意味着它可以在已发布的版本上运行。即使它确实如此,也可以停止任何更新。 Apple多次改变了存储内容和手机中的路径结构。你可以写的地方。

进行捆绑调用以获取标准文件夹的路径位置。

使用资源库从照片库加载图像,或将其保存在那里。

有很多关于如何执行此操作的资源和教程。