【问题标题】:Core Data: copy-on-write entities?核心数据:写时复制实体?
【发布时间】:2015-04-29 07:54:01
【问题描述】:

我们需要在 iOS 应用程序包中发送大量种子数据。但是,应用程序需要根据需要更新来自服务器的数据。来自服务器的更新需要根据需要“覆盖”种子数据。

计划是有两个持久存储,“a”和“b”,其中“a”是从应用程序包中安装的只读持久存储,“b”是读写持久存储。我们需要两个商店共享相同的模型(和实体)以保持应用程序逻辑简单。因此,如果一个实体被修改并且它最初在存储“a”中,则修改应该保存在存储“b”中,这会覆盖“a”中存在的任何属性。本质上,它是一种“写时复制”范例。

问题是:

  • 这在 Core Data 中可以实现吗?怎么样?
  • 如果不可行,是否有其他替代方法可以拥有大量种子数据,但又不会在用户设备上复制(也就是浪费)空间?

【问题讨论】:

  • 为什么需要存储“a”(只读的)?您不能在应用程序包中提供预先填充的数据,然后只使用一个商店吗?
  • @MichałCiuba 种子数据非常大,因此从应用程序包中复制数据(以便可以写入)需要复制数据,这对用户来说并不“礼貌” .当用户安装它时,其中一些种子数据项可能会过时,因此需要部分更新。此外,应用程序的每次更新也需要更新这些数据,如果现有数据文件已经包含用户内容,我们不能只覆盖它。

标签: ios entity-framework cocoa core-data


【解决方案1】:

保存新数据:

Store *newStoreItem = [NSEntityDescription insertNewObjectForEntityForName:@"Store"
                                                                        inManagedObjectContext:self.managedObjectContext];

                newStoreItem.store_id       = [[data objectAtIndex:i] valueForKey:@"id"];
                newStoreItem.lat            = [[data objectAtIndex:i] valueForKey:@"lat"];
                newStoreItem.lng            = [[data objectAtIndex:i] valueForKey:@"lng"];

然后在需要的时候检查一下:

- (BOOL) isStoreExist
{
    AppDelegate* appDelegate = [UIApplication sharedApplication].delegate;
    self.managedObjectContext = appDelegate.managedObjectContext;

        fetchedStoreItem = [[appDelegate getStore_byID:store_id]mutableCopy];


    if ([fetchedStoreItem count] == 0)
    {
        return NO;}
    else
    {
        return YES;}
}

然后替换数据:

fetchedStoreItem = [[appDelegate getStore_byID:store_id]mutableCopy];

                 Store *oldStoreItem = [fetchedStoreItem objectAtIndex:0];

                 oldStoreItem.store_id       = [[data objectAtIndex:i] valueForKey:@"id"];
                 oldStoreItem.lat            = [[data objectAtIndex:i] valueForKey:@"lat"];
                 oldStoreItem.lng            = [[data objectAtIndex:i] valueForKey:@"lng"];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 2011-11-06
    • 2011-10-15
    相关资源
    最近更新 更多