上一篇文章中我們已經(jīng)詳細的介紹了通知擴展怎么使用,無奈我們產(chǎn)品的設(shè)計又有了其他 奇(辣) 思(雞) 妙(到) 想(死)的想法.
類似于這種就必須需要在通知擴展中拿到拿到主工程的配置
在iOS 8系統(tǒng)之前,每一個app在物理上都是彼此獨立的盖矫,app之間不能互訪彼此的私有數(shù)據(jù)。而在引入擴展之后,其他app可以與擴展進行數(shù)據(jù)交換√阶瘢基于安全和性能的考慮焕檬,每一個擴展運行在一個單獨的進程中,它擁有自己的bundle
笆搓, bundle
后綴名是.appex
。擴展bundle
必須包含在一個普通應(yīng)用的bundle的內(nèi)部。
但是可能是本人太笨的原因砚作,還是無法在通知擴展中調(diào)用主工程的配置窘奏,于是我在網(wǎng)上廢了很長一段時間去搜資料(其實是自己太懶,沒有認真搜)葫录,終于被我找到了一個神奇的東西App Groups
App Groups
iOS8之后蘋果加入了App Groups功能着裹,應(yīng)用程序之間可以通過同一個group來共享資源,app group可以通過NSUserDefaults
進行小量數(shù)據(jù)的共享米同,或者使用 NSFileCoordinator
和NSFilePresenter
甚至是 CoreData
和 SQLite
來進行更大的文件或者是更復(fù)雜的數(shù)據(jù)交互骇扇。
首先我們需要開啟 App Groups。得益于 Xcode 5 開始引入的Capabilities
面粮,這變得非常簡單(至少不再需要去 developer portal 了)少孝。選擇主ZYBaseTest
,打開它的 Capabilities
選項卡熬苍,找到 App Groups
并打開開關(guān)稍走,然后添加一個你能記得的 group名字,比如 group.ZYNotificationServiceGr
柴底。接下來你還需要為 ZYBaseTestPushExtend
這個 target 進行同樣的配置婿脸,只不過不再需要新建 group,而是勾選剛才創(chuàng)建的 group 就行柄驻。
以上兩個操作在
ZYBaseTest
和ZYBaseTestPushExtend
兩個target中都需要設(shè)置好狐树,設(shè)置好了之后,數(shù)據(jù)就可以共享了鸿脓。
注意 抑钟,坑點要來了
一般我們都是使用NSUserDefault
來存儲一些小的配置,比如我就是存的用戶是否開啟了語音播報野哭、是否選擇了簡易的語音播報在塔。我相信大家一般都是用[NSUserDefaults standardUserDefaults]
來創(chuàng)建NSUserDefaults
對象,但是如果通過這種方式創(chuàng)建的話拨黔,你是無法在通知擴展中拿到你在主工程中設(shè)置的NSUserDefaults
信息;桌!!
在這里蓉驹,存儲數(shù)據(jù)時,一定要通過[[NSUserDefaults alloc] initWithSuiteName:@"groupName"]
這個格式去創(chuàng)建NSUserDefaults
對象揪利,groupName
填寫當前設(shè)置AppGroups勾選的名字(比如我的就是group.ZYNotificationServiceGr
)
創(chuàng)建方法區(qū)別
-
initWithSuiteName
會在Library/Preference下新建一個以name為名字的plist文件 (兩個訪問的是同一個plist) -
[NSUserDefaults standardUserDefaults]
是以bundle id為名字的一個plist文件 (兩個訪問的是不同的plist)
AA:利用這個我們可以給每一個用戶新建一個偏好設(shè)置的文件态兴,保存皮膚,字體等疟位,不同的用戶登錄就會有不同的效果瞻润。
另外可能是我個人的原因吧,即使設(shè)置了APP group我還是無法在通知擴展中訪問pch內(nèi)的東西,所以我只有祭出殺器然后就是很順利的訪問了
最后為了你們看的方便绍撞,我把我宏的字段也給你們看
吼吼~結(jié)束了正勒,本人文采太差了,見諒見諒哈 傻铣。希望對你們有點點幫助章贞。