2014-11-14 63 views
1

我想讀/寫額外的類文件中的數據是公開的。 (StoreData.swift)應用程序和擴展 - 使用核心數據==錯誤:sharedApplication()'不可用

我的功能:

func FetchName (NameforDate: String) -> NSString 
     { 
      var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate) 
      var context:NSManagedObjectContext = appDel.managedObjectContext! 
    } 

在行在哪裏。 「(UIApplication.sharedApplication()」 我得到的錯誤:

StoreData.swift:115:49: 'sharedApplication()' is unavailable: Use view controller based solutions where appropriate instead.

我創建應用程序和擴展今天。

+0

的UIApplication不是個擴展。 – quellish 2014-11-14 16:48:54

+0

我試圖找到其他方法如何在沒有UIApplication的情況下訪問CoreData – user3062571 2014-11-14 17:14:15

+0

您不需要UIApplication來訪問CoreData。您的應用程序和擴展程序必須各自獨立訪問核心數據。這可以通過多種方式完成,但這超出了您的問題範圍。 – quellish 2014-11-14 18:06:27

回答

-2

要在App和Today Widget之間共享數據,請遵循Apple的指導原則,您必須在目標的功能選項卡下創建一個App Group並將其鏈接到App和Widget。

訪問共享默認:

NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:YOUR_APP_GROUP_ID]; 

它的工作原理完全一樣[NSUserDefaults的standardUserDefaults]這樣你就可以存儲你的數據的最小的一部分,但它是你能做的一切。

編輯:

在這裏你可以找到套房默認斯威夫特DOC: https://developer.apple.com/Library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/index.html#//apple_ref/occ/instm/NSUserDefaults/initWithSuiteName

編輯2:

使用單例訪問您的核心數據,而不是,你可以找到一個簡單的教程在這裏: http://www.johnwordsworth.com/2010/04/iphone-code-snippet-the-singleton-pattern/

+0

這是一個使用NSUserDefaults的問題,因爲我想要刷新應用程序數據時,我拉下窗口小部件或打開應用程序...該刷新應用程序數據是基於CoreData爲我的應用程序... 例如,當我拉下窗口小部件,我想調用函數refresh_data()並從該函數中獲取一個新變量。此函數從CoreData加載數據 – user3062571 2014-11-14 17:30:03

+0

您是否試圖將NSManagedObjectContext移入單​​例類中,而不是您的AppDelegate?這將使您的核心數據可從今天的小部件訪問 – 2014-11-15 09:12:26

0

如果你需要一個管理對象上下文您可以在extension.Your的AppDelegate中創建自己將不會提供給您。我建議搬出,從您的應用程序委託類你可以在兩者之間分享。您仍然可以偵聽核心數據更新,以便它們不需要共享上下文/持久存儲座標。

編輯:

我想指出的是,擴展是本質不同的沙箱。因此,如果您創建共享類,實例將不會在App和Extension之間共享。因此,使持續存儲協調員和上下文有所不同。

+0

我的公共類與ViewController的App和TodayViewController進行通信,以便通過所有變量進行擴展,但是當我創建一些SharedApplication數據時,它給了我一個錯誤... – user3062571 2014-11-14 17:07:45

+0

確保您創建的類被添加到兩個目標中。 – rfrittelli 2014-11-14 18:35:26

-1

您的問題:

StoreData.swift:115:49: 'sharedApplication()' is unavailable: Use view controller based solutions where appropriate instead.

是因爲-[UIApplication sharedApplication]不適用於擴展。您的擴展程序不會作爲您的應用程序的一部分運行,因此沒有用於擴展消息的應用程序上下文。

這在App擴展編程指南部分明確解釋上Understanding How an App Extension Works

Because of its focused role in the system, an app extension is ineligible to participate in certain activities. An app extension cannot:

• Access a sharedApplication object, and so cannot use any of the methods on that object

+0

感謝您的迴應!它應該幫助我找到如何在沒有UIApplication的情況下訪問CoreData的另一種方式......還有其他一些如何在沒有UIApplication的情況下讀/寫數據到CoreData的方法? ...謝謝 – user3062571 2014-11-14 18:21:13

+0

CoreData完全獨立於UIKit和UIApplication。它是一個完全獨立的框架,不依賴於UIKit。 – quellish 2014-11-14 18:22:33

相關問題