如何在今天的扩展(iOS)中访问CoreData模型

是否有可能像在原来的应用程序一样快速扩展中使用我的CoreData模型? 如果是的话,我如何创buildNSManagedObjectContext?
我真的没有线索,除了组标识符,但不幸的是我不知道如何获得上下文..
在过去,我创build的应用程序开始时,我想使用CoreData的检查,然后我通过我的AppDelegate managedObjectContext ..但我怎么能做一个这样的扩展在这样的思考? 苹果公司不提供有关的信息..

我在AppDelegate中编辑了这一行:

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"HTWcampus.sqlite"]; 

到这个(包括组到两个目标之后):

 NSURL *storeURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.BenchR.TodayExtensionSharingDefaults"]; storeURL = [storeURL URLByAppendingPathComponent:@"HTWcampus.sqlite"]; NSLog(@"StoreURL2: %@", storeURL); 

由于我的应用程序中现有的数据库已经不存在了(这是好事,因为我认为它把数据库放在共享段中)。

但是我怎样才能在扩展中创build我的上下文的实例? 我怎样才能访问我的NSManagedObject子类?

在扩展中,我有这个代码到目前为止:

 var context: NSManagedObjectContext! override func viewDidLoad() { super.viewDidLoad() var storeURL = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.BenchR.TodayExtensionSharingDefaults") storeURL = storeURL?.URLByAppendingPathComponent("HTWcampus.sqlite") let modelURL = NSBundle.mainBundle().URLForResource("HTWcampus", withExtension: "momd") let model = NSManagedObjectModel(contentsOfURL: modelURL) let coordinator = NSPersistentStoreCoordinator(managedObjectModel: model) coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: storeURL, options: nil, error: nil) context = NSManagedObjectContext() context.persistentStoreCoordinator = coordinator } 

这是正确的吗? 如果是的话,我怎么能得到我的NSManagedObject子类呢? 我必须添加momd文件到扩展目标? 如果是,我该怎么做?

你真正想要的是访问你的持久存储(最有可能的是一个SQLite数据库)。 为了达到这个目的,你需要configuration应用组,并确保你的主机应用使用你的共享容器来configuration核心数据堆栈(所以你的商店也可以通过扩展访问)。 就像是:

  NSString *containerPath = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:YOUR_SECURITY_APP_GROUP].path; NSString *sqlitePath = [NSString stringWithFormat:@"%@/%@", containerPath, @"database.sqlite"]; 

然后,在您的扩展中,只需使用共享容器中的数据库创build托pipe对象上下文的持久性存储协调器。 你可以分享你的模型(.momd)和pipe理对象的子类,只要确保它们也包含在扩展目标中。

编辑:

要添加模型和托pipe对象子类:

1.确保你有你的应用程序和扩展目标

  1. 确保你有你的应用程序和扩展目标

    2.点击您的模型文件,并在右侧面板的“目标成员”下选择两个目标

  2. 点击你的模型文件,并在右侧面板的“Target Membership”下select两个目标

    3.对所有托管对象子类重复相同操作

  3. 对所有托pipe对象的子类重复相同的操作