从 XCAsset 目录中获取数据
Posted
技术标签:
【中文标题】从 XCAsset 目录中获取数据【英文标题】:Get Data from XCAsset catalog 【发布时间】:2016-01-25 20:50:59 【问题描述】:我知道要从资产目录中获取图像,我可以使用 UIImage(named: "fileName") 来做到这一点。
但是,如果我从 XCAsset 目录中获取 DATA 怎么办?我想不通。
我试过了,
let url = NSBundle.mainBundle().URLForResource("fileName", withExtension: nil)
let data = NSData(contentsOfURL: url!)
但它是零。我不知道如何从 XCAssets 目录中获取数据。如果有人可以帮助我(谷歌搜索没有帮助),请告诉我,我将非常感激!
更新:
我为什么要尝试从资产目录中获取数据?我将动画 gif 拖到资产目录中。资产目录将其解释为 DATA。这就是我尝试从资产目录中获取数据的原因。
更新: 这是我的 Assets.xcassets 文件夹的屏幕截图。
它有一个名为“_Loading”的文件,在右边它被认为是一个“数据集”。 我不确定如何从 Assets 目录中获取数据集。
【问题讨论】:
您无法从资产目录中获取数据。资产目录有图像,而不是数据。您发布的代码用于从资源包中读取文件,而不是资产。 如何以及为什么将数据放入 XCAssets? 您发布的代码有什么问题?一般来说,从资源包中读取文件是正确的。只要确保您指定正确的文件名和扩展名。请记住,案例很重要。 如果“fileName”不在资产目录中,它可以工作。我将数据放入资产目录,因为这是一项新功能。我可以将数据拖到资产目录中,但将其拉出来是个谜。 顺便说一句...我将动画 gif 拖到资产目录中。资产目录将其解释为 DATA。这就是我试图从资产目录中获取数据的原因。 【参考方案1】:我将回答我自己的问题。
从 ios 9 开始,资产目录不仅允许图像。它们允许数据集。为了从 Asset Catalog 中获取数据,您必须使用 NSDataAsset 类。
示例:假设您有一个名为“CoolJSON”的数据资产
if let asset = NSDataAsset(name: "CoolJSON")
let data = asset.data
let d = try? NSJSONSerialization.JSONObjectWithData(data, options: [])
在这个例子中,我把一个 NSData 对象变成了一个 json。
NSDataAsset class reference
【讨论】:
酷。我不知道。 我需要做一个特殊的配置吗?因为当我检查数据资产时它返回 nil 因此我无法访问内容。 @Klinkert0728 无特殊配置。您要获取什么数据集? 我在我的 .xcassets 中创建了一个 DataAsset "airports",它包含一个 json,但是当你调用方法 NSDataAsset(name: "airports") 它返回 nil @Klinkert0728 它应该是 NSDataAsset(name: "jsonName")【参考方案2】:从 Assets.xcassets 文件加载 gif 图像。加载 json 文件也是如此。
新增:【新建数据集】创建一个数据集并在 Assets.xcassets 文件夹中重命名为“funny”。好的,gif 文件被添加到 Assets.xcassets 文件夹中。
使用:
NSDataAsset *asset = [[NSDataAsset alloc] initWithName:@"funny"];
self.gifImageView.image = [UIImage sd_animatedGIFWithData:asset.data];
(UIImage *)sd_animatedGIFWithData:(NSData *)data:是一个UIImage+GIF类,用于在SDWebImage中加载gif图片。
【讨论】:
以上是关于从 XCAsset 目录中获取数据的主要内容,如果未能解决你的问题,请参考以下文章
flow_from_directory 可以从 Keras 的同一目录中获取训练和验证数据吗?