Core Data モデルを作成し、データを更新および削除するためのメソッドを含むカテゴリ クラスを作成しました。クラスにバリデーションメソッドを追加しようとしており、KVC を使用しようとしていますが、少し苦労しています。
私の問題はこれです。検証メソッドは、実際にコンテキスト [context save:&internalError] を保存したときにのみトリガーされます。それらは正しく機能していますが、保存プロセスも完了します。私の質問はこれです、検証がトリガーされるのはいつですか、保存する前にトリガーできますか、それとも私はこれを完全に間違っていますか?
私のコード:
+(int)doSmeThing:(InstructionMessageObject *)message inManagedObjectContext:(NSManagedObjectContext *)context error:(NSError **)error {
NSError *internalError = nil;
int timeStamp = [[NSDate date] timeIntervalSince1970];
NSManagedObject *newMessageObject = [NSEntityDescription insertNewObjectForEntityForName:@"CoreDataTable"inManagedObjectContext:context];
[newMessageObject setValue:message.productCode forKey:@"productCode"];
[newMessageObject setValue:message.quantity forKey:@"quantity"];
///////////////////////////////////////
// Need to validate HERE before save //
///////////////////////////////////////
if (![context save:&internalError]) {
*error = internalError;
return NO;
}
return YES;
}
- (BOOL)validateProductCode:(id *)ioValue error:(NSError **)outError {
*outError = nil;
if ([*ioValue integerValue] < 1 ) {
*outError = [NSError errorWithDomain:@"domain" code:101 userInfo:[NSDictionary dictionaryWithObject:@"Invalid Product Code" forKey:NSLocalizedDescriptionKey]];
return NO;
}
return YES;
}
- (BOOL)validateQuantity:(id *)ioValue error:(NSError **)outError {
*outError = nil;
if ([*ioValue integerValue] < 1 ) {
*outError = [NSError errorWithDomain:@"domain" code:102 userInfo:[NSDictionary dictionaryWithObject:@"Invalid Quantity" forKey:NSLocalizedDescriptionKey]];
return NO;
}
return YES;
}