如何从iOS中另一个nsarray中不存在的核心数据中删除对象?

时间:2016-07-07 13:36:45

标签: ios iphone core-data

我有一个应用程序,我需要从核心数据对象中删除元素中不存在的元素。

-(void)removeoldvalueswhichisnotpresentinnewone:(NSArray *)array{
    for(int j=0;j < [array count]; j++){
    NSString *pred = [NSString stringWithFormat:@"no !=\"%@\"",[array objectAtIndex:j]];
    NSArray *allRes = [self getObjectsOfType:@"Cr" withPredicate:pred];
         NSLog(@"%@",allRes);
    if ([allRes count] > 0) {
        @try {
            for(int i=0;i < [allRes count]; i++){
                [[self managedObjectContext] deleteObject:(Cr *)[allRes objectAtIndex:i]];
            }
            [self save];
        }
        @catch (NSException *exception){
            //   NSLog(@"Del Warning: Caught  %@: %@", [exception name], [exception reason]);
        }
    }   
    }
}

但它没有正常工作。任何人都可以指出我哪里出错了?

1 个答案:

答案 0 :(得分:1)

一些想法:

  1. 不要使用NSString的stringWithFormat构建谓词,请使用NSPredicate的predicateWithFormat
  2. no是一个数字吗?如果是这样,你不应该在%@周围加上引号。
  3. “否”是保留字;尝试使用不同的属性名称。
  4. 你的逻辑是否正确?它将删除与数组中第一个对象不匹配的所有项(因此只保留与第一个对象匹配的那些项),然后循环并删除与第二个对象不匹配的所有项等,这可能会删除那些通过第一次通过循环)。如果对象与 all 数组中的对象不匹配,则只应删除对象。您可以改为使用NOT IN谓词:

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (attribute IN %@)", array];
    

    您将不需要外循环。