gpt4 book ai didi

ios - App Bundle 中包含核心数据存储

转载 作者:可可西里 更新时间:2023-11-01 03:23:07 24 4
gpt4 key购买 nike

我在 Apple 文档中找不到这些步骤的清晰描述...

  1. 我的 xcode 项目中有一个 xcdatamodeld
  2. 在启动时,我的应用程序解析 XML(项目资源)以填充核心数据存储 (SQLLite)
  3. 在我的应用程序的生命周期中,我添加、删除、更新该商店的数据

现在,我想停止在设备上执行繁重的 XML 解析过程,而是直接包含一个包含所需数据的 Store。

我对此有一些疑问:

  • 我可以用 OS X 应用填充一个商店,然后将这个商店包含在我的 XCode-iOs 项目中吗?
  • 我的商店没有出现在 Xcode 中。实际上它是在运行时创建的。如何在项目中添加商店并将其链接到我的 xcdatamodeld?
  • 我读到这样做会阻止我的存储可写...我想我必须在启动时将它复制到正确的位置(核心数据实用程序教程对此有很大帮助)。我说得对吗?

感谢您的提示。 URL 或其他 SO 问题将不胜感激!

凯洛德

最佳答案

您可以在您的应用中包含存储文件(大多数情况下是 sqlite 数据库)。然后在您的应用委托(delegate)中编辑 persistentStoreCoordinator getter merhod:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

if (persistentStoreCoordinator_ != nil) {
return persistentStoreCoordinator_;
}

NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"CoreDataStore.sqlite"];

// Check if the store exists in.
if (![[NSFileManager defaultManager] fileExistsAtPath:storePath]) {
// copy the payload to the store location.
NSString *bundleStore = [[NSBundle mainBundle] pathForResource:@"YourPayload" ofType:@"sqlite"];

NSError *error = nil;
[[NSFileManager defaultManager] copyItemAtPath:bundleStore toPath:storePath error:&error];

if (error){
NSLog(@"Error copying payload: %@", error);
}
}

NSError *error = nil;
NSURL *storeURL = [NSURL fileURLWithPath:storePath];
persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}

return persistentStoreCoordinator_;
}

关于ios - App Bundle 中包含核心数据存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5633079/

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