2014-09-23 113 views
12

我已經通過userDefaults在我的應用程序和它的Today Extension之間成功共享數據,但是當涉及位於應用程序的Documents文件夾中的實際文件時,我遇到了麻煩。從Today Extension中訪問應用程序文檔文件夾

當我使用此代碼在我的應用程序:

var documentsDir:NSString = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String 

返回:

/var/mobile/Containers/Data/Application/296494AA-946C-40E0-8646-F0895E131DCB/Documents/ 

,但在擴展它返回:

/var/mobile/Containers/Data/PluginKitPlugin/AB484342-537A-4CE7-9EF3-F2CAE352C8A3/Documents/ 

,顯然,這些文件不在那裏。

我讀的地方,我應該使用:

let containerURL = manager.containerURLForSecurityApplicationGroupIdentifier("group.com.company.app") 
let filePath = containerURL.path 

但它返回:

/private/var/mobile/Containers/Shared/AppGroup/CD7CF610-EB5F-4246-8D30-D7F8BFA6A219 

這也不能工作。

如何讓我的iOS 8 Today擴展程序讀取位於文檔中的容器應用程序的文件?

謝謝!

回答

14

您無法從擴展程序訪問包含應用程序的文檔文件夾。

但是,您可以創建一個共享容器,該容器可以通過包含應用程序及其所有擴展來訪問。

您正在使用containsURLForSecurityApplicationGroupIdentifier進行正確的跟蹤。你只需要在應用程序和擴展中使用它。它不訪問文檔文件夾,而是訪問另一個容器。

如果要更新現有的應用程序已經在文件夾被存儲數據,您需要將數據移動到S8的日常擴展

退房此鏈接。 http://www.glimsoft.com/06/28/ios-8-today-extension-tutorial/

+0

我可以訪問.json文件。有了這個safariContentBlocker容器? – JAck 2016-09-28 13:05:50

+2

該鏈接沒有關於在磁盤上使用共享容器的任何信息。它使用NSUserDefaults。 – funroll 2016-10-21 18:27:29