Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Can';无法从存储在资产目录中的文件中获取数据_Ios_Xcode - Fatal编程技术网

Ios Can';无法从存储在资产目录中的文件中获取数据

Ios Can';无法从存储在资产目录中的文件中获取数据,ios,xcode,Ios,Xcode,我正在资产目录中存储几个.svg文件。 要检索资产,我使用以下代码: NSDataAsset *asset = [[NSDataAsset alloc] initWithName:@"p"]; 运行此代码时,我会收到以下日志消息: CoreUI:正在尝试查找类型不是AssertCatalog中数据类型的命名数据“p” 文件名为“p.svg”,存储在以“dataset”为扩展名的文件夹中。我尝试为文件使用其他扩展名,但没有任何效果。我总是得到相同的错误,并且资产为零。只需引用svg或项目中的任

我正在资产目录中存储几个.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个文件移出资产目录。根据文档,我的方法应该有效。即使你不想移动更多文件,你也没有理由否决我的答案。如果你的方法有效,你为什么在这里问?我的也行。我认为人们的看法是,资产是前进的方向,还是不前进的方向,所以移动文件或似乎恢复为捆绑似乎是过去时?我遇到了同样的问题。你找到解决办法了吗?