【问题标题】:Can't get data from file stored in asset catalog无法从存储在资产目录中的文件中获取数据
【发布时间】:2020-10-22 20:22:31
【问题描述】:

我在资产目录中存储了几个 .svg 文件。 要检索资产,我使用以下代码:

 NSDataAsset *asset = [[NSDataAsset alloc] initWithName:@"p"];

运行此代码时,我收到以下日志消息:

CoreUI:尝试使用不是 AssertCatalog 中数据类型的类型查找命名数据“p”

文件名为“p.svg”,存储在以“dataset”为扩展名的文件夹中。我尝试为该文件使用其他扩展名,但没有任何效果。我总是得到同样的错误,资产为零。

【问题讨论】:

  • 我遇到了同样的问题。你找到解决办法了吗?

标签: ios xcode


【解决方案1】:

这可能与我遇到的问题有关,因为我正在识别我的资产的 UTI 可能会运行 UTI 依赖项并找到 public.image,从而使 CoreUI 认为资产是图像类型并且不是数据类型。

SVG 继承自 public.image,因此您需要将文件类型设置为不继承自 public.image 的内容。只需 public.data 就足够了。

【讨论】:

    【解决方案2】:

    只需引用 svg 或项目中的任何文件,例如 .h/.m:

    NSString *path = [[NSBundle mainBundle] pathForResource:@"p" ofType:@"svg"];
    [NSData dataWithContentsOfFile:path];
    

    如果路径为零,请尝试:

    In the Xcode target "Build Phases" add the file under "Copy Bundle Resources"".
    

    【讨论】:

    • 我不想将大约 100 个文件移出资产目录。根据文档,我的方法应该有效。
    • 即使您不想移动更多文件,也没有理由拒绝我的回答。如果你的方法有效,为什么你在这里问?我的也可以。
    • 我认为资产是前进的方向与否,所以移动文件或看似恢复到捆绑包似乎是过去式?
    【解决方案3】:

    我也有这个问题;我想从本地资产商店提供图像等。将文件拖到目录中,我会像这样获取它们 - 这里是一个字符串:

    extension NSString {
        class func string(fromAsset: String) -> String {
            guard let asset = NSDataAsset.init(name: fromAsset) else {
                return String(format: "Unable to locate asset:\n%@", fromAsset)
            }
            let data = NSData.init(data: (asset.data))
            let text = String.init(data: data as Data, encoding: String.Encoding.utf8)
        
            if fromAsset.hasSuffix(".md"), let html = try? Down(markdownString: text!).toHTML()
            {
                let htmlDoc = String(format: "<html><body>%@</body></html>", html)
                let data = Data(htmlDoc.utf8)
                if let attrs = try? NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html], documentAttributes: nil) {
                    return attrs.string
                }
            }
            return text!
        }
    }
    

    前提是他们必须存在。我认为每个类型/类的扩展会使检索变得简单。最终,通用对象扩展可以分派到适当的扩展,就像这里一样,您必须知道它是什么,因此目前要手动决定使用哪个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多