核心数据:写时复制实体?

时间:2015-04-29 07:54:01

标签: ios entity-framework cocoa core-data

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

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

问题是:

  • 核心数据是否可以实现?怎么样?
  • 如果不能使用其他替代品来获得大种子数据但又不能在用户设备上复制(a.k.a。浪费)空间?

1 个答案:

答案 0 :(得分:0)

保存新数据:

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"];