iOS

时间:2016-05-09 11:19:47

标签: ios objective-c core-data

我在核心数据中收到以下错误

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unimplemented SQL generation for predicate (mRemainderId LIKE <MSaveRemainders: 0x1740cae90>

以下是我使用的代码

  -(void) deleteRemainders:(NSMutableArray*) deleteArray{
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"MSaveRemainders" inManagedObjectContext:self.managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    for (NSString *remainderId in deleteArray) {
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"mRemainderId LIKE %@", remainderId];
        [fetchRequest setEntity:entity];
        [fetchRequest setPredicate:predicate];
        [fetchRequest setReturnsObjectsAsFaults:NO];
        NSError *error;
        NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
        for (NSManagedObject *managedObject in fetchedObjects) {
            [self.managedObjectContext deleteObject:managedObject];
        }
    }

}

删除数组包含

(entity:MSaveRemainders; id:0xd000000000040002; data:{     FurtherSubCategoryId = nil;     mDate =“2016-05-10”;     mNote =“这是财务”;     mNumberOfGlasses = 6;     mRemainderId = 1462793810;     mRepeat =无;     mRepeatDays =“”;     mSleepTime =“晚上10点”;     mSnooze =否;     mTime =“(\ n \”05:06 pm \“\ n)”;     mTitle =财务;     mTone =“”;     mWakeUpTime =“06:00 AM”;     mWaterInLitres =“1.6”;     mYourWeight = 50;     mainCategoryId = 1;     subCategoryId =“(null)”; })

1 个答案:

答案 0 :(得分:0)

因为你试图在不包含NSString的数组中访问NSString,所以你的数组只包含MSaveRemainders 所以你应该得到MSaveRemainders种类的对象并检查它的属性, 您的方法应如下所示

-(void) deleteRemainders:(NSMutableArray*) deleteArray{
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"MSaveRemainders" inManagedObjectContext:self.managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    for (MSaveRemainders *savedReminder in deleteArray) {
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"mRemainderId LIKE %@", [savedReminder.data valueForKey:@"mRemainderId"]];

        // or like the follwing if "data" is a property of a class ( model )
        /*
         NSPredicate *predicate = [NSPredicate predicateWithFormat:@"mRemainderId LIKE %@", savedReminder.data.mRemainderId ];

         */
        [fetchRequest setEntity:entity];
        [fetchRequest setPredicate:predicate];
        [fetchRequest setReturnsObjectsAsFaults:NO];
        NSError *error;
        NSArray *fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
        for (NSManagedObject *managedObject in fetchedObjects) {
            [self.managedObjectContext deleteObject:managedObject];
        }
    }
}