2015-04-29 4 views
0

Нам нужно отправить большие данные о семени в комплекте приложений iOS. Однако приложению необходимо обновить данные с сервера по мере необходимости. Обновления с сервера должны «перезаписывать» данные семян по мере необходимости.Основные данные: объекты с копированием на запись?

Планирование состоит из двух постоянных хранилищ «a» и «b», в которых «a» является постоянным хранилищем только для чтения, установленным из набора приложений, а «b» является постоянным хранилищем для чтения и записи , Нам нужны оба магазина для совместного использования одной и той же модели (и сущностей), чтобы логика приложения была простой. Следовательно, если сущность, если она была изменена, и она первоначально находилась в «a», изменения должны быть сохранены в хранилище «b», который переопределяет любые атрибуты, присутствующие в «a». По сути, это парадигма «копирование на запись».

Вопросов:

  • Является ли это достижимо в Core Data? Как?
  • Если нет работоспособных других альтернатив для получения больших данных семян и, тем не менее, не дублирования (a.k.a.) на устройстве пользователя?
+0

Почему магазин "а" (считанную только один)? Не можете ли вы предоставить предварительно заполненные данные в комплекте приложений, а затем использовать только один магазин? –

+0

@ MichałCiuba. Данные о семенах довольно велики и, таким образом, копирование данных из пакета приложений (чтобы оно могло быть записано) влечет за собой дублирование данных, и оно не будет «вежливым» для пользователя. Некоторые из этих данных семенных данных, вероятно, устарели, когда пользователь установит его, следовательно, требование частичных обновлений. Кроме того, каждое обновление приложения должно также обновлять эти данные, и мы не можем просто перезаписать существующий файл данных, если он уже содержит пользовательский контент. – adib

ответ

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"]; 
Смежные вопросы