是否可以像在原始应用程序中一样在今天的扩展中使用我的 CoreData 模型?如果是,我该如何创建 NSManagedObjectContext?
除了组标识符,我真的不知道,但不幸的是我不知道如何获取上下文。
过去我创建应用程序时一开始就检查我想使用 CoreData,然后我得到了 managedObjectContext通过我的 AppDelegate .. 但是我怎么能在扩展中做一些这样的想法呢?苹果没有提供这方面的信息..
我在 AppDelegate 中编辑了这一行:
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"HTWcampus.sqlite"];
对此(在将组包括到两个目标之后):
NSURL *storeURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.BenchR.TodayExtensionSharingDefaults"];
storeURL = [storeURL URLByAppendingPathComponent:@"HTWcampus.sqlite"];
NSLog(@"StoreURL2: %@", storeURL);
这样,我应用程序中的现有数据库就消失了(这很棒,因为我认为将数据库放在共享段中很有效)。
但是如何在扩展中创建我的上下文实例?以及如何访问我的 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-Subclasses 放在那里?我是否必须将 momd 文件添加到扩展目标?如果是,我该怎么做?