gpt4 book ai didi

iphone - 如何将我的文件写入 NSBundle?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:21:07 26 4
gpt4 key购买 nike

我正在编写一个 iPhone/iPad 应用程序,其中包含压缩文件,这些文件基本上是网站的内容,然后我可以在提取后运行这些文件。但是,我想将所有这些文件和文件夹放入一个文件中,即一个 NSBundle 文件,这样我就可以将它显示给用户,就好像它是一个文件一样,然后可以将其删除或移动但未遍历。(我的应用程序允许遍历整个 NSDocuments 文件夹)

我知道您可以轻松地将自己的 NSBundle 导入您的项目,然后将其读入网站。但是,是否有可能使用已经创建的目录结构来编写一个目录结构,其中的文件和文件夹必须保持原样,即我之前描述的网络文件夹?

如果不是 NSBundle,我可以将文件夹写入(转换)为任何其他类型的包吗?

如果没有,你对我的困境还有什么建议

最佳答案

这不是对您问题的直接回答,而是看待问题的另一种方式。

  1. 具体来说,您声明您的应用程序允许遍历整个 NSDocumentDirectory 中的文件夹。由于您的代码是其中枚举文件/文件夹的代码,因此您可以简单地实现您的枚举代码,以便它将匹配某种模式(例如 *.bundle)的文件夹视为层次结构中的叶节点;用户永远不需要知道里面有什么东西。

  2. 更进一步,您可以将 .zip 文件直接存储在文档目录中,然后在 UIWebView 请求访问各个 URL 时将其内容直接提供给它。

    可以注册 NSURLProtocol 的子类,它首先检查所有 URL 请求。如果子类表示它可以处理特定的 URL(例如,对于特定的主机或路径),那么将创建该子类的一个实例并要求提供内容。

    此时,您可以使用一些压缩读取代码,例如 Objective-Zip从 zip 中读取请求的文件,并从请求中返回其内容。

    使用NSURLProtocol +registerClass:向系统注册子类。

    在下面的示例中,我的协议(protocol)处理程序忽略所有请求,但对我的站点的请求除外。对于那些它返回相同的硬编码字符串(作为概念验证):

    MyURLProtocolRedirector.h:

    #import <Foundation/Foundation.h>

    @interface MyURLProtocolRedirector : NSURLProtocol
    + (BOOL)canInitWithRequest:(NSURLRequest *)request;
    + (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request;
    - (void)startLoading;
    - (void)stopLoading;
    @end

    MyURLProtocolRedirector.m:

    #import "MyURLProtocolRedirector.h"

    @implementation MyURLProtocolRedirector

    + (BOOL)canInitWithRequest:(NSURLRequest *)request {
    if ([request.URL.host compare:@"martinkenny.com"] == 0) {
    return YES;
    }
    return NO;
    }

    + (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request {
    return request;
    }

    - (void)startLoading {
    NSURLResponse *response = [[NSURLResponse alloc] initWithURL:self.request.URL MIMEType:@"text/plain" expectedContentLength:11 textEncodingName:nil];
    [self.client URLProtocol:self didLoadData:[[NSData alloc] initWithBytes:"Hello World" length:11]];
    [self.client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageAllowed];
    [self.client URLProtocolDidFinishLoading:self];
    }

    - (void)stopLoading {
    }

    @end

    SomeViewController.m:

    // register the new URL protocol handler with the system
    [NSURLProtocol registerClass:[MyURLProtocolRedirector class]];

    UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
    [webView loadRequest:[[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.seenobjects.org/"]]];
    [self.view addSubview:webView];

关于iphone - 如何将我的文件写入 NSBundle?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11373652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com