以编程方式访问 TVOS 的 Assets 文件夹中的文件/文件夹

Posted

技术标签:

【中文标题】以编程方式访问 TVOS 的 Assets 文件夹中的文件/文件夹【英文标题】:Access the files/folders in the Assets folder for TVOS programmatically 【发布时间】:2016-07-11 20:55:04 【问题描述】:

我正在使用 Swift 3.0 开发 TVOS 10 项目,我正在尝试从控制器访问 Assets 文件夹中的文件。

我有这个数组:

var posters: [String] = ["image1", "image2", "image3","image4", "image5"]

但我想以编程方式填充这个数组。所以如果我更改资产中的文件,数组的内容应该会改变。

因为稍后我会这样做:

//currentImage is an ImageView in storyboard
 currentImage.image = UIImage(named: posters[currentPoster])

这是我文件的层次结构。

这是我尝试过的,但它没有给我想要的。

if let resourcePath = Bundle.main().resourcePath 
        print(resourcePath)
        do 
            let temp = try FileManager.default().contentsOfDirectory(atPath: resourcePath)
            print(temp)
            let assetsPath = resourcePath + "/" + temp[6]
            let temp2 = try FileManager.default().contentsOfDirectory(atPath: assetsPath)
            print (temp2)
        
        catch let error as NSError 
            print(error)
        
    

输出:

/var/containers/Bundle/Application/9AECCDB0-DD5F-4377-9237-6E7DA1E14A39/PosterAppTV.app

[“Assets.car”、“Base.lproj”、“Frameworks”、“Info.plist”、“META-INF”、“PkgInfo”、“PosterAppTV”、“_CodeSignature”、“embedded.mobileprovision”、 "libswiftRemoteMirror.dylib"]

Error Domain=NSCocoaErrorDomain Code=256 "无法打开文件“PosterAppTV”。" UserInfo=NSFilePath=/var/containers/Bundle/Application/9AECDB0-DD5F-4377-9237-6E7DA1E14A39/PosterAppTV.app/PosterAppTV, NSUserStringVariant=( 文件夹 ), NSUnderlyingError=0x1740524e0 Error Domain=NSPOSIXErrorDomain Code=20 "不是目录"

对如何获取 Assets/Posters 文件夹中的文件名列表有任何帮助吗? 另外,如果这不可能,是否有其他方法可以将一些图片存储到文件夹中,然后以编程方式访问这些文件的名称?

【问题讨论】:

相关 ios 帖子(tvOS 也一样):Access Asset Catalog pathForResource。不确定您是否可以通过编程方式访问资产目录,因为它是在运行时编译的。 那篇文章基本上说你真的可以通过编程来做到这一点。 我想做点什么:var allFileInAsset = getFilesInAssets(): for(file in allFilesInAssets) do something with file.name @JAL 我更新了这个问题。看看我想做的事情是否更有意义。 @user2512806 查看我对您问题的回答***.com/questions/38316068/… 【参考方案1】:

当你把你的图片放在assets时,说明xcode已经记住了你所有的图片名,不需要调用任何文件夹名或目录路径,现在你可以直接在代码中调用你的图片名。

这是您要查找的内容:

var posters: [String] = ["image1", "image2", "image3","image4", "image5"]

if let myImage = UIImage(named: posters[2]) 
         imageView.image = myImage  //image3 is called at the index of 2 in posters array
    
 else 
      print("image not found")
 

或者您可以像这样在一行中检索图像:

imageView.image = UIImage(named: posters[2]) 

【讨论】:

以上是关于以编程方式访问 TVOS 的 Assets 文件夹中的文件/文件夹的主要内容,如果未能解决你的问题,请参考以下文章

tvOS - 如何以编程方式返回主屏幕

使用“Assets.xcassets”中的图像文件以编程方式更改 iOS 应用程序图标

以编程方式使用资产创建 SKSpriteNode

安卓,播放音乐资源文件

我可以通过代码以编程方式打开位置服务吗

如何以编程方式访问 ipad“视频”文件夹