无法从存储在资产目录

时间:2015-10-02 10:49:16

标签: ios xcode

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

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

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

  

CoreUI:尝试查找命名数据' p'类型不是AssertCatalog

中的数据类型

该文件的名称是' p.svg'它存储在一个带有'数据集的文件夹中。作为扩展。我尝试使用其他扩展名的文件,但没有任何作用。我总是得到同样的错误,资产是零。

3 个答案:

答案 0 :(得分:0)

只需引用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"".

答案 1 :(得分:0)

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

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

what you need to change

答案 2 :(得分:0)

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

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!
    }
}

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