从扩展程序读取和写入iOS应用程序文档文件夹

时间:2015-04-17 14:25:39

标签: ios objective-c

我正在开发一个具有动作扩展的objective-c iOS应用程序。当动作扩展加载时,我需要从主机应用程序的文档目录中读取一些文件,然后将文件写入主机应用程序文档目录。我创建了一个应用程序组,应用程序和扩展程序都设置了该应用程序组。但是,在设置它之后,我仍然没有弄清楚如何从扩展程序读取和写入主机应用程序文档文件夹中的文件。有什么想法吗?

谢谢,

约什

3 个答案:

答案 0 :(得分:1)

您无法直接写入主机应用程序本身。通过应用程序组,您可以访问iOS应用程序和扩展程序都可访问的共享文件系统容器。

要获取该共享文件系统根文件夹的URL,请使用以下调用:

FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.something")

答案 1 :(得分:0)

例如:存储和读取图像文件

// store
// goal: move image located in main bundle to shared documents folder 
// so that extension can access the image
NSString *gifPath = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"gif"]; // located in main bundle
NSData *gifData = [NSData dataWithContentsOfFile:gifPath]; // image data
// get the path of shared folder
NSString *destinationPath = [[[[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"app.group-name"] path] stringByAppendingPathComponent:@"image.gif"]; // where to store your image
[gifData writeToFile:destinationPath atomically:YES]; // write to shared document folder

// load
NSData *storedImage;
// get shared document folders path
NSString *path = [[[[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:kKeyboardSuiteName] path] stringByAppendingPathComponent:@"image.gif"]];
storedImage = [NSData dataWithContentsOfFile:path]; //load image

答案 2 :(得分:-1)

虽然首选使用“containerURLForSecurityApplicationGroupIdentifier”并且并不复杂,但您可以通过从扩展程序中调用主应用程序中的ViewController来实际读取和写入文档目录:

喜欢:

MainViewController * mvc = [MainViewController alloc]init];
NSData * theFile =[mvc readFileFromDocFolder];