2

我正在创建一个钛移动应用程序,其中包含用于PDF编辑的 iOS 模块。我在钛项目(Titanium Studio)资源目录中有一个 pdf 文件。如何从 iOS 模块访问PDF文件?

我得到了文件路径Titanium.Filesystem.getResourcesDirectory()+'filename.pdf';

并将路径传递给 iOS 模块作为方法参数。

如何在 iOS 模块中获取文件?

4

2 回答 2

2

你可以使用 TiUtils 的方法“toUrl:proxy:”。文档中的示例如下,但它也适用于您从 JS 领域获取的 arg(只需将“路径”字符串替换为您自己的):

NSString *path = [NSString stringWithFormat:@"modules/%@/foo.png",[self moduleId]];
NSURL *url = [TiUtils toURL:path proxy:self];
UIImage *image = [TiUtils image:url proxy:self];

“self”可以是您的模块,因为 TiModules 本身就是代理(换句话说,将其保留为 self 可能对您来说很好)。

想要一个更完整的例子吗?看看我前段时间写的 AirPrint 模块。"print:(id)args" 方法接受一个 { url: "whatever.pdf" },将其转换为一个 URL,并在 UI 线程上用它做一些有趣的事情。

- (void)print:(id)args
{
    ENSURE_UI_THREAD(print,args);
    ENSURE_SINGLE_ARG(args,NSDictionary);

    NSURL* url = [TiUtils toURL:[args objectForKey:@"url"] proxy:self];
    if (url==nil) {
        NSLog(@"[ERROR] Print called without passing in a url property!");
        return;
    }
于 2013-03-07T04:28:37.733 回答
1

如果它在 Resources 目录中,那么只需将名称传递给模块,因为这意味着 PDF 位于主应用程序资产包中,请使用以下代码获取它的路径:

// The application assets can be accessed by building a path from the mainBundle of the application.
NSString *filePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"filename.pdf"];

这是 Titanium 的 iOS 的 moddevguide 中对此的参考。

作为附录如果您发现自己试图将完整路径传递给 iOS 中的模块,则需要通过执行以下操作来解析本机路径

var file = Titanium.Filesystem.getResourcesDirectory()+'filename.pdf';
var actualPathToPassToModule = file.resolve();
于 2013-03-06T17:01:42.587 回答