我们需要在iOS应用程序包中发送大型种子数据。但是,应用程序需要根据需要从服务器更新数据。服务器的更新需要根据需要“覆盖”种子数据。
计划是拥有两个持久存储,“a”和“b”,其中“a”是从应用程序包中安装的只读持久存储,“b”是读写持久存储。我们需要两个商店共享相同的模型(和实体)以保持应用程序逻辑简单。因此,如果实体如果被修改并且它最初在商店“a”中,则修改应该保存在商店“b”中,其覆盖“a”中存在的任何属性。从本质上讲,它是一种“写时复制”范式。
问题是:
答案 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"];