我在资产目录中存储了几个.svg文件。 要检索资产,我使用以下代码:
NSDataAsset *asset = [[NSDataAsset alloc] initWithName:@"p"];
运行此代码时,我收到以下日志消息:
CoreUI:尝试查找命名数据' p'类型不是AssertCatalog
中的数据类型
该文件的名称是' p.svg'它存储在一个带有'数据集的文件夹中。作为扩展。我尝试使用其他扩展名的文件,但没有任何作用。我总是得到同样的错误,资产是零。
答案 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
即可。
答案 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!
}
}
前提是它们必须存在。我认为每个类型/类的扩展将使检索变得简单。最终,通用对象扩展可以分派给适当的扩展,因为在这里,您必须知道它是什么,因此,当前使用的决定是手动的。