2015-04-30 76 views
1

我有一个我在2012年创建的iOS应用程序(单一视图应用程序)。现在,我想添加“今日扩展”目标到解决方案。我已将Todays Extension添加为单独的目标。我面临的问题是我无法使用我在原始项目中添加的任何文件。多个目标共享文件

即使我导入标题,我仍然不能实例化属于我原始项目的类。我怎样才能在两个目标之间分享课程。

主要问题:

的主要问题是,我创建默认目标SQLite数据库。数据库存储在主应用程序的Documents目录中。问题是,Todays Extension无法访问该目录,即使我将路径保存在NSUserDefaults中,它仍然无法访问它。

+0

是否有任何与导入标题相关的错误?什么具体的错误信息/问题阻止你实例化原始项目中的类? –

回答

0

您必须检查您的检查员文件以与今日扩展目标共享。

enter image description here
选择您的.m文件,并在右侧列(检查员)中检查文件的“目标成员资格”。只需将其添加到您的扩展。
(在上图中,Weather Live - Suisse是今天的扩展和其他目标regulare应用程序)。

+0

谢谢!我会尝试。我改变了一个类的目标成员资格以拥有Todays Extension,但它调用了其他几个类,因此看起来像我必须手动添加许多类到Todays Extension目标。 –

+0

是的,有时它很漂亮,但我不知道另一种向你的扩展添加文件的方式。 –

+0

另一个问题是数据库存储在一个目标的Documents目录中,这个目录不能从Todays扩展目标访问。 –

-1
  • 您必须创建嵌入式框架才能在您的应用扩展程序及其包含的应用程序之间共享代码。

  • 要启用数据共享,使用的Xcode或开发人员门户以使应用程序组对所述含的应用程序和其包含的应用程序扩展。

下面是苹果的文档链接

Adding App group

Handling Common Scenarios in App & extentions

是discribes你需要的一切。

+0

嵌入式框架不是必需的,他不谈论数据共享,但代码文件共享。 –

+0

@ David'mArm'Ansermot要共享代码,您必须使用嵌入式框架,那就是我所说的 –

0

按以下祖拜尔的链接:

  • 创建应用程序组(例如group.com.yourcompany.app)并将其分配给您的应用程序和窗口小部件
  • 当打开文档都,获得NSURL它,使用例如:

    NSURL *storeURL ; 
    
    storeURL= [[[NSFileManager defaultManager] 
          containerURLForSecurityApplicationGroupIdentifier:@"group.com.yourcompany.app"] 
          URLByAppendingPathComponent:@"yourdatabase.sqlite"]; 
    

它不是必要使用一个共同的框架,但它避免代码重复。