Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 应用程序和扩展-使用核心数据==错误:sharedApplication()';不可用_Ios_Iphone_Xcode_Swift - Fatal编程技术网

Ios 应用程序和扩展-使用核心数据==错误:sharedApplication()';不可用

Ios 应用程序和扩展-使用核心数据==错误:sharedApplication()';不可用,ios,iphone,xcode,swift,Ios,Iphone,Xcode,Swift,我正在尝试读取/写入额外类文件中的数据,该文件是公共的。(StoreData.swift) 我的职能: func FetchName (NameforDate: String) -> NSString { var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate) var context:NSManagedO

我正在尝试读取/写入额外类文件中的数据,该文件是公共的。(StoreData.swift)

我的职能:

  func FetchName (NameforDate: String) -> NSString
         {
             var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
             var context:NSManagedObjectContext = appDel.managedObjectContext! 
    }
在第行where is“(UIApplication.sharedApplication())中,我得到了错误:

StoreData.swift:115:49:“sharedApplication()”不可用:使用视图 在适当的情况下,采用基于控制器的解决方案


我创建了应用程序和今日扩展。

如果您需要托管对象上下文,您可以在扩展中创建自己的上下文。您将无法使用您的AppDelegate。我建议您将其从应用程序委派中移出到一个可以在两者之间共享的类。您仍然可以侦听核心数据更新,因此它们不需要共享e上下文/持久存储坐标

编辑:


我想指出的是,扩展本质上是一个不同的沙盒。因此,如果您创建一个共享类,那么应用程序和扩展程序之间的实例将不相同。因此,使持久存储协调器和上下文不同。

要在应用程序和Today小部件之间共享数据,遵循苹果的指导原则,您必须o在target的“功能”选项卡下创建一个应用程序组,并将其链接到应用程序和小部件

要访问共享默认值,请执行以下操作:

NSUserDefaults*sharedDefaults=[[NSUserDefaults alloc]initWithSuiteName:您的应用程序组ID];
它的工作原理与[NSUserDefaults standardUserDefaults]完全相同,因此您可以存储数据的一小部分,但这是您所能做的一切

编辑:

在这里,您可以找到套件默认设置的Swift文档: :

编辑2:

使用单例访问您的核心数据,您可以在此处找到一个简单的教程: 您的问题:

StoreData.swift:115:49:“sharedApplication()”不可用:请在适当的情况下使用基于视图控制器的解决方案

是因为
-[UIApplication sharedApplication]
对扩展不可用。您的扩展不作为应用程序的一部分运行,因此没有消息扩展的应用程序上下文

这一点在《应用程序扩展编程指南》的以下章节中有明确说明:

由于其在系统中的重点角色,应用程序扩展没有资格参与某些活动。应用程序扩展不能:

•访问sharedApplication对象,因此无法在该对象上使用任何方法


UIApplication在扩展中不可用。我正在尝试寻找其他方法,如何在没有UIApplication的情况下访问CoreData您不需要UIApplication来访问CoreData。您的应用程序和扩展必须各自独立访问核心数据。这可以通过任意数种方法完成,但这超出了您的问题范围。嗯……您可以吗请给我一个建议,如何在没有UIApplication的情况下将数据读/写到CoreData?…类似于var-context:NSManagedObjectContext=xxx.managedObjectContext?。您必须写一个不同的问题。这个问题是关于为什么您无法访问SharedApplication我的公共类与应用程序和Toda的ViewController通信yViewController用于通过所有变量进行扩展,这没关系,但当我创建一些SharedApplication数据时,它会给我一个错误…请确保将您创建的类添加到两个目标中。使用NSUserDefaults是一个问题,因为我想在下拉小部件或打开应用程序时刷新应用程序数据…刷新应用程序数据基于我的应用程序…例如,当我下拉小部件时,我想调用函数refresh_data()并从该函数中获取一个新变量。此函数从CoreDataLoading数据您是否尝试在singleton类中移动NSManagedObjectContext而不是您的AppDelegate?这将使您的核心数据从今天开始可访问Widget感谢您的响应!这将帮助我找到另一种方法,如何在不使用UIAppl的情况下访问CoreDataIfication…还有其他一些方法可以在没有UIApplication的情况下将数据读/写到CoreData?…ThanksCoreData完全独立于UIKit和UIApplication。它是一个完全独立的框架,不依赖UIKit。@quellish,那么如何将文件从gmail/google drive/messenger应用程序打开/导入到我的应用程序?有什么解决方法吗?