Objective c 无法在类别中实现核心数据验证

Objective c 无法在类别中实现核心数据验证,objective-c,core-data,Objective C,Core Data,我正在核心数据中实现验证功能,如下所示: - (BOOL)validateMovementId:(id)value error:(NSError **)error { NSString * idValue = (NSString *) value; Movement * m = [Movement loadMovement:idValue context:self.managedObjectContext]; if(m != nil) return NO; return YES;

我正在核心数据中实现验证功能,如下所示:

- (BOOL)validateMovementId:(id)value error:(NSError **)error {

NSString * idValue = (NSString *) value;
Movement * m = [Movement loadMovement:idValue context:self.managedObjectContext];

if(m != nil)
    return NO;

return YES;  }
我在底层核心数据模型类上使用了一个类别,这样我就可以使用XCode自动重写这些类,而不会丢失添加的内容。这适用于除上述方法之外的所有方法,该方法在保存托管上下文时为我提供了对方法本身的EXC_BAD_访问


事情是这样的:将此函数从类别中移到基类中可以解决问题。我猜这是因为当核心数据用于保存上下文时,它没有使用我的类别,而是使用基类,因此指针无效。是否有任何方法可以使用类别实现验证,或者是否有必要对自动生成的对象进行子类化以实现此目的,并且仍然保留使用XCode自动重写这些对象的能力?

您是否可以进一步说明“当我保存托管上下文时,上述方法[…]为我提供了对方法本身的EXC\u BAD\u访问”的含义?当我在当前NSManagedObjectContext上调用save:方法时,这会触发将数据提交到持久数据存储。核心数据自动尝试调用我定义的validate:error:methods。当在自动生成的类上的类别中定义时,执行终止,出现EXC_BAD_访问异常,方法定义上的执行中断(即,XCode在首次定义验证方法的行上显示停止执行)。我的假设是,因为我使用的是一个类别,所以函数指针是nil。我认为这肯定是错误的。我对所有CD内容都使用分类,它们工作得很好。这个方法看起来有点疯狂:你应该在验证中查找一个对象吗?我猜mom是空的或其他什么。这个验证例程的目的是检查用户输入的packageId是否已经被其他记录使用。我可以在不进行查找的情况下尝试函数,看看这是否会产生不同的结果,但请记住,我在方法本身中没有得到错误。核心数据正在调用validate函数,为什么对象本身会为null?还有其他想法吗?这里出了什么问题?请记住,如果我将此函数移动到核心数据模型上的子类,它将正常工作。