2015-08-18 2 views
3

Я искал ответ здесь, но ни один из них не решил мою проблему ...
Я сохранил некоторые данные в основных данных, в Truck Managed Object Subclass. Вот код:
Как проверить, существует ли объект в данных ядра

for (NSDictionary *dictTruck in self.trucksArray) { 
     Truck *truck = [NSEntityDescription insertNewObjectForEntityForName:@"Truck" inManagedObjectContext:_managedObjectContext]; 
     Country *country = [NSEntityDescription insertNewObjectForEntityForName:@"Country" inManagedObjectContext:_managedObjectContext]; 

     NSFetchRequest *truckRequest = [[NSFetchRequest alloc]init]; 
     NSEntityDescription *truckDescription = [NSEntityDescription entityForName:@"Truck" inManagedObjectContext:_managedObjectContext]; 
     [truckRequest setEntity:truckDescription]; 
     NSMutableArray *mutableReq = [[_managedObjectContext executeFetchRequest:truckRequest error:nil]mutableCopy]; 
     self.trucksArray = [[NSMutableArray alloc]initWithArray:mutableReq]; 
     [truck setModel:[dictTruck objectForKey:@"model"]]; 
     [truck setYear:[dictTruck objectForKey:@"year"]]; 
     [truck setCountry:country]; 
     [country setCountryName:[dictTruck objectForKey:@"country"]]; 
     [_managedObjectContext save:nil]; 

    } 


И это работает довольно хорошо. Теперь проблема заключается в том, что у меня есть JSON, что я скачивание с сервера через AFNetworking в формате, как это:

{ 
    "trucks": [ 
     { 
      "model": "Scania", 
      "year": "2014", 
      "country": "Sweden" 
     }, 
     { 
      "model": "DAF", 
      "year": "2012", 
      "country": "Ireland" 
     } 
    ] 
} 


Это JSON обновляется каждый час, так что старые данные JSON + новый ... Теперь, мой вопрос, как я могу проверить, существует ли этот объект в Core Data, например: Truck.model = @ "Scania", Truck.year = @ "2014", Truck.Country.countryName = @ "Sweden"; И если он соответствует всем этим условиям, его не следует сохранять на CD ...
Заранее спасибо.
Обновление:
В этом коде часть запроса для объектов в основных данных, потому что я пробовал так много способов решить эту проблему.

+0

Вам необходимо использовать NSFetchRequest вместе с NSPredicate для поиска определенной записи: http://stackoverflow.com/questions/10612955/fetch-request-fority-attribute-somevalue – user523234

+0

Не могли бы вы быть более конкретными, потому что Я создал NSFetchRequest, но проблема в том, что я не знаю, как установить условие, чтобы проверить, выполнено ли оно. – Stefan

+0

Вот для чего нужен NSPredicate. В ссылке, которую я опубликовал, если полученный результат отрицательный, то вы знаете ... Я не на компьютере stackoverflow.com Я не могу написать код. – user523234

ответ

2

На мой взгляд, должно быть UNIQUEtruck_id в JSON ответ, как этот

{ 
    "trucks": [ 
     { 
      "id": "00000001" 
      "model": "Scania", 
      "year": "2014", 
      "country": "Sweden" 
     }, 
     { 
      "id": "00000002" 
      "model": "DAF", 
      "year": "2012", 
      "country": "Ireland" 
     } 
    ] 
} 

Спасите id в Truck модели и каждый раз, когда вы получите ответ от сервера, просто проверить, если есть модель с такими же id в основных данных.

Для каждого грузовика JSON, сделать Запрос на получение первого

NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; 
request.entity = [NSEntityDescription entityForName:@"Truck" inManagedObjectContext:context]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"truckID = %d", truckIDInResponse]; 
request.predicate = predicate; 
NSError *error = nil; 
NSArray *objs = [context executeFetchRequest:request error:&error]; 
if (error) { 
    [NSException raise:@"no truck find" format:@"%@", [error localizedDescription]]; 
} 
if (objs.count > 0) { 
    // there is a truck with same id exsist. Use update method 
}else { 
    // there's no truck with same id. Use insert method 
} 

truckID является собственностью вашей Truck модели.

+0

Да, хорошее мнение. Не могли бы вы помочь мне проверить, существует ли id в основных данных? – Stefan

+0

@Stefan Обновить мой ответ –

Смежные вопросы