2016-12-23 21 views
2

我有一個應用程序實現了Today擴展。直到iOS10它工作正常,但現在我看到它無法讀取共享NSuserDefaults中存儲的密鑰。iOS 10今天擴展程序無法再讀取共享用戶的默認值

我的主機應用程序代碼:

NSUserDefaults *sharedPrefs = [[NSUserDefaults alloc] initWithSuiteName:kSharedGroupIdentifier]; 
[sharedPrefs setObject:username forKey:@"username"]; 
[sharedPrefs setObject:@"Test" forKey:@"test"]; 
[sharedPrefs synchronize]; 

我的擴展代碼:

NSUserDefaults *sharedPrefs = [[NSUserDefaults alloc] initWithSuiteName:kSharedGroupIdentifier]; 
NSString *str = [sharedPrefs valueForKey:@"test"]; 

和STR VAR始終在擴展爲零。我已經在主機應用和擴展應用的功能中設置了我的應用組,並且我已根據Apple開發人員門戶上的設置對其進行了檢查。這一切都OK。任何人都可以請幫忙,有什麼不同,我必須做的?

編輯 ,我已經注意到的另一件事是,我有一個紅色的感嘆號:「添加組授權添加到您的授權文件」,而當我解決這個問題,感嘆號消失,但當我關閉並重新打開項目時,它再次出現。我重新創建了臨時配置文件,但仍然是相同的問題

回答

4

聽起來像問題是您的權利文件缺少相關的行。

要診斷這裏的問題是,開始您的構建設置:

  • Code Signing Entitlements應該有一個文件中列出
  • 打開該文件,並確保它與相匹配的價值App Groups關鍵您kSharedGroupIdentifier
  • 確保該文件未標記爲只讀(這將可能導致「修復」無法正常工作)
  • 確認以下所有比賽:
    • kSharedGroupIdentifier在這兩個應用
    • kSharedGroupIdentifier和App Groups

下一頁您的權利文件中的值,我們可以縮小問題到特定的鍵或整個優先領域如下:

NSUserDefaults *sharedPrefs = [[NSUserDefaults alloc] initWithSuiteName:kSharedGroupIdentifier]; 
if (sharedPrefs == nil) { 
    NSLog(@"Error loading shared user defaults!"); 
} 

零值表示套件名稱無效。

+0

非常感謝,這是第一點。 – AntonijoDev

0

重新啓動 mac解決了我的問題。

Apple RNotes WWDC種子:運行多個iOS模擬器可能導致NSUserDefaults無法運行運行iOS 8或9模擬器,然後運行iOS 10模擬器將導致NSUserDefaults在模擬器中停止工作。這可以通過重新啓動主機Mac來解決。

我希望它能幫助你,

謝謝。

+0

我試過了,但它沒有工作,順便說一句,我的問題也出現在設備上。我注意到的另一件事是,我有一個紅色感嘆號:「將添加組權利添加到您的授權文件」,當我解決問題時,感嘆號消失,但是當我關閉並重新打開項目時,它是那裏再次。我重新創建了臨時配置文件,但仍然是相同的問題, – AntonijoDev