Coredata找到一个包含值

时间:2017-04-20 08:56:26

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

我有一个核心数据表,它包含100个数据,一个可变数组有一些数据。 iw ant搜索可变数组包含数据存在于表中或不存在.mutable数组包含3个参数使用这些参数我需要找出一个id。包含我的表 我正在使用此代码

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@ IN self.@allKeys" ,self.beaconListArray ];
request.predicate = predicate;
NSError *error = nil;
NSArray *objs = [managedObjectContext executeFetchRequest:request error:&error];
if (error) {
    [NSException raise:@"no  find" format:@"%@", [error localizedDescription]];
    NSLog(@"there is noooo  with same id exsist");
}
if (objs.count > 0) {
    NSLog(@"there is a with same id exsist. Use update method");
}else {
    NSLog(@"there's no  with same id. Use insert method");
}

1 个答案:

答案 0 :(得分:0)

据我所知,你有一系列数据。每个数据项都是字典或自定义对象或其他东西,并且具有uniqueId。您希望将数据插入或更新到核心数据中。

我不确定您为uniqueId使用的属性或您尝试插入的数据类型。所以这段代码只是为了演示。

首先从数据中获取uniqueIds。类似的东西:

NSArray* thingIdArray = [self.beaconListArray valueForKeyPath:@"uuid"];

接下来做一个提取。你的谓词看起来像

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K IN %@", @"uuid", thingIdArray];

接下来将作为托管对象数组的结果转换为字典,其中键是uniqueId。

NSMutableDictionary* dict = [NSMutableDictionary dictionary];
for (CoreDataThing* t in result) {
    NSString* thingId = t.uuid;
    if (thingId) {
        dict[thingId] = t;
    }
}

现在,对于每个数据项,您可以看到项目是否已存在

for (NSDictionary* a in self.beaconListArray) {
    NSString* thingId = a[@"uuid"];
    CoreDataThing* coreDataThing = dict[thingId];
    if (!coreDataThing) {
         coreDataThing = //create it here and set default values
    }
    [coreDataThing updateWithSomeObject:a]
}