我试图在公共的额外类文件中读/写数据。 (StoreData.swift)
我的功能:
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()'不可用:使用视图 相反,基于控制器的解决方案。
我创建了App and Today Extension。
答案 0 :(得分:0)
如果您需要托管对象上下文,则可以在扩展程序中创建自己的托管对象。您的AppDelegate将无法使用。我建议将其从您的应用代表移到可以在两者之间共享的课程。您仍然可以收听核心数据更新,因此他们不需要共享上下文/持久存储坐标。
修改强>
我想指出扩展本质上是一个不同的沙箱。因此,如果您创建共享类,则实例将不会在App和Extension之间共享。因此使持久性存储协调器和上下文不同。
答案 1 :(得分:-1)
您的问题:
StoreData.swift:115:49:' sharedApplication()'不可用:改为使用基于视图控制器的解决方案。
是因为-[UIApplication sharedApplication]
无法用于扩展程序。您的扩展程序不会作为应用程序的一部分运行,因此消息的扩展名没有应用程序上下文。
Understanding How an App Extension Works上的App Extension编程指南部分清楚地解释了这一点:
由于其在系统中的重点作用,应用扩展程序没有资格参与某些活动。应用扩展程序不能:
•访问sharedApplication对象,因此不能使用该对象上的任何方法
答案 2 :(得分:-2)
要在App和Today Widget之间共享数据,遵循Apple指南,您必须在目标的功能选项卡下创建一个应用程序组,并将其链接到App和Widget。
要访问您的共享默认值:
NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:YOUR_APP_GROUP_ID];
它的工作原理与[NSUserDefaults standardUserDefaults]完全相同,因此您可以存储数据的最小部分,但它可以做到。
编辑:
在这里,您可以找到适用于套件默认值的Swift文档: https://developer.apple.com/Library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/index.html#//apple_ref/occ/instm/NSUserDefaults/initWithSuiteName:
编辑2:
使用Singleton来访问您的Core Data,您可以在这里找到一个简单的教程: http://www.johnwordsworth.com/2010/04/iphone-code-snippet-the-singleton-pattern/