【问题标题】:Updating preloaded data alongside user-data in a Core Data app在 Core Data 应用程序中更新预加载数据和用户数据
【发布时间】:2012-06-07 11:28:07
【问题描述】:

简单的问题,但对我来说,执行起来很艰难。我只在开发一个处于 alpha 阶段的应用程序,但我的测试人员需要拥有最新的数据库。我有一个包含两个实体的核心数据模型:服装和服装记录。

服装是一个“静态”模型,它具有预加载的数据(如帽子、衬衫、裤子等),只有在我更新模型时才会更改。

ClothingRecord 是用户填充的实体,与实体 Clothing 有关系。

我刚刚遇到的是我想更改服装中的数据。不仅更改 Clothing 的属性(例如将名称从“Hat”更改为“Cap”),而且我还想添加和删除项目。

我对 Core Data 还很陌生,所以我使用了 Ray Wenderlich 的关于如何预加载数据的教程: http://www.raywenderlich.com/980/core-data-tutorial-how-to-preloadimport-existing-data

这是第一次很好用。我有一个数据库正在运行。但是,现在我已经更改了它,我不确定如何正确更新 Clothing 实体。我是否遍历所有对象并进行比较?我只是添加新东西吗?由于现有关系,我不能去删除对象,对吧?

是否有关于如何使用预加载数据更新 Core Data 驱动的应用程序的指南或教程?我想这一直在发生,但我找不到任何可靠的资源。

【问题讨论】:

  • 我添加了一个编辑。也许您可能会感兴趣。

标签: iphone ios core-data preload


【解决方案1】:

我是否遍历所有对象并进行比较?我只是添加新东西吗?一世 由于存在关系,不能去删除对象,对吧?

这取决于。我会尽力给你一些建议。

我会遍历所有对象并进行比较吗?

为了遍历和比较,首先,我将插入一个用作标识符的属性(例如guid)。拥有标识符可以让您将检索到的对象与 Core Data 进行比较。例如,如果“Hat”的 guid 为 1234 而“Cap”具有相同的 guid,您可以简单地通过标识符获取并使用新名称更新该对象。这可以通过设置NSPredicate (how-to-update-existing-object-in-core-data) 来实现。

我只是添加新东西吗?

如果您与第二个实体没有关系,您可以这样做。相反,您需要将新对象与原始关系链接起来。

由于现有关系,我不能去删除对象

和以前一样,你需要重新创建那些关系,然后删除你感兴趣的对象。

如果您刚开始使用 CD,我将尝试第一个解决方案。我还建议了一个旧答案,我在之前关于 Core Data 的 SO 帖子中写过 (mapping-business-objects-with-core-data-in-ios)。

希望对你有帮助。

编辑

关于最后两个选项,您可以执行两步操作。

首先,创建一个请求,让您获取预先填充的 Clothing 对象。

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Clothing" inManagedObjectContext:moc]];

NSError *error = nil;
NSArray *results = [moc executeFetchRequest:request error:&error];

数组results 包含检索到的对象,现在用for-loop 创建新对象并设置正确的关系。

for(Clothing* clothing in results) {

    Clothing* newClothing = [NSEntityDescription insertNewObjectForEntityForName:@"Clothing" inManagedObjectContext:moc];
    newClothing.name = @"Cap";
    newClothing.relationshipToWhatYouWant = clothing.relationshipToWhatYouWant;
}

最后,如果需要,删除旧对象。

附:检查代码,因为我是手写的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 2020-01-01
    • 1970-01-01
    相关资源
    最近更新 更多