gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 05:02:24 25 4
gpt4 key购买 nike

是否可以像在原始应用程序中那样在今天的扩展中快速使用我的 CoreData 模型?如果是,我如何创建 NSManagedObjectContext?
我真的不知道,除了组标识符,但不幸的是我不知道如何获取上下文..
过去,我创建应用程序时一开始就检查我想使用 CoreData,然后我通过我的 AppDelegate 获得了 managedObjectContext。但是我怎么能在扩展中做这样的事情呢? Apple 不提供相关信息..

我在 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 文件添加到扩展目标?如果是,我该怎么做?

最佳答案

您真正想要的是访问您的持久存储(很可能是 SQLite 数据库)。为了实现这一点,您需要配置应用程序组并确保您的主机应用程序使用您的共享容器配置核心数据堆栈(因此您的商店也可以在扩展中访问)。像这样的东西:

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

然后在您的扩展中,只需使用共享容器中的数据库创建具有托管对象上下文的持久存储协调器。您可以通过扩展共享您的模型 (.momd) 和托管对象子类,只需确保它们也包含在扩展目标中即可。

编辑:

添加模型和托管对象子类:

1. Make sure you have your app and extension targets

  1. 确保您有自己的应用和扩展程序目标

    2. Click on your model file, and select both targets under 'Target Membership' on right-hand panel

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

    3. Repeat the same with all your managed object subclasses

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

关于ios - 如何在今天的扩展中访问 CoreData 模型(iOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25407428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com