Ios Can';无法从存储在资产目录中的文件中获取数据
我正在资产目录中存储几个.svg文件。 要检索资产,我使用以下代码:Ios Can';无法从存储在资产目录中的文件中获取数据,ios,xcode,Ios,Xcode,我正在资产目录中存储几个.svg文件。 要检索资产,我使用以下代码: NSDataAsset *asset = [[NSDataAsset alloc] initWithName:@"p"]; 运行此代码时,我会收到以下日志消息: CoreUI:正在尝试查找类型不是AssertCatalog中数据类型的命名数据“p” 文件名为“p.svg”,存储在以“dataset”为扩展名的文件夹中。我尝试为文件使用其他扩展名,但没有任何效果。我总是得到相同的错误,并且资产为零。只需引用svg或项目中的任
NSDataAsset *asset = [[NSDataAsset alloc] initWithName:@"p"];
运行此代码时,我会收到以下日志消息:
CoreUI:正在尝试查找类型不是AssertCatalog中数据类型的命名数据“p”
文件名为“p.svg”,存储在以“dataset”为扩展名的文件夹中。我尝试为文件使用其他扩展名,但没有任何效果。我总是得到相同的错误,并且资产为零。只需引用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"".
这可能与我遇到的一个问题有关,因为我正在识别我的资产的UTI可能会运行UTI依赖项并找到
public.image
,从而使CoreUI认为资产是图像类型而不是数据类型
SVG继承自public.image
,因此需要将文件类型设置为不继承自public.image
。只要将其公开。数据就足够了
我也有这个问题;我想提供本地资产商店的图片等。将文件拖到目录中,我会像这样获取它们-这里是一个字符串:
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!
}
}
扩展字符串{
类func字符串(fromAsset:string)->string{
guard let asset=NSDataAsset.init(名称:fromAsset)else{
返回字符串(格式:“无法定位资产:\n%@”,来自资产)
}
let data=NSData.init(数据:(asset.data))
让text=String.init(数据:数据作为数据,编码:String.encoding.utf8)
如果fromAsset.hasSuffix(“.md”),则让html=try?Down(markdowstring:text!).toHTML()
{
让htmlDoc=字符串(格式:“%@”,html)
让数据=数据(htmlDoc.utf8)
如果让attrs=try?nsattributestring(数据:数据,选项:[.documentType:nsattributestring.documentType.html],documentAttributes:nil){
返回属性字符串
}
}
返回文本!
}
}
前提是他们必须存在。我认为每个类型/类的扩展将使检索变得简单。最终,一个通用对象扩展可以分派到适当的扩展,如这里所示,您必须知道它是什么,因此使用哪个扩展目前是手动决定的。我不想将~100个文件移出资产目录。根据文档,我的方法应该有效。即使你不想移动更多文件,你也没有理由否决我的答案。如果你的方法有效,你为什么在这里问?我的也行。我认为人们的看法是,资产是前进的方向,还是不前进的方向,所以移动文件或似乎恢复为捆绑似乎是过去时?我遇到了同样的问题。你找到解决办法了吗?