如何检查核心数据中是否存在对象

时间:2015-08-18 08:07:38

标签: ios objective-c json xcode core-data

我在这里搜索过答案,但这些都没有解决我的问题...... 我已在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 = @“瑞典”;如果它匹配所有这些条件,它不应保存在CD中...
提前致谢。
更新:
在此代码中是对核心数据中对象的请求,因为我已经尝试了很多方法来解决这个问题。

1 个答案:

答案 0 :(得分:2)

在我看来,响应json中应该有一个 UNIQUE truck_id,就像这样

{
    "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
}

truckIDTruck模型的属性。

相关问题