Core Data を使用するアプリがあり、UIManagedObject を使用してその ManagedObjectContext を取得します。読んだところ、コンテキストを直接保存することを想定していないことがわかりました-むしろ、UIManagedObject の自動保存に依存するか、saveToURL を使用する必要があります:... 私の問題は、エンティティに格納されているデータを検証することです。文字列プロパティの最小長が 1 であることを指定するエンティティに制約があります。ただし、新しいオブジェクトを作成し、そのプロパティに空の文字列を割り当てて、ファイルを保存することはできます。saveToURL:... の完了ハンドラーでは、常に真の成功値があります。次に、エンティティの name プロパティ用に独自のバリデータを作成しました。Core Data Programming Guide のサンプルコードを使用しました -
-(BOOL)validateName:(id *)ioValue error:(__autoreleasing NSError **)outError
{
if (*ioValue == nil)
{
if (outError != NULL)
{
NSString *errorStr = @"nil error";
NSDictionary *userInfoDict = [NSDictionary dictionaryWithObject:errorStr
forKey:NSLocalizedDescriptionKey];
NSError __autoreleasing *error = [[NSError alloc] initWithDomain:@"domain"
code:1
userInfo:userInfoDict];
*outError = error;
}
return NO;
}
else if( [*ioValue length] == 0 )
{
if (outError != NULL) {
NSString *errorStr = @"length error";
NSDictionary *userInfoDict = [NSDictionary dictionaryWithObject:errorStr
forKey:NSLocalizedDescriptionKey];
NSError __autoreleasing *error = [[NSError alloc] initWithDomain:@"domain"
code:1
userInfo:userInfoDict];
*outError = error;
}
return NO;
}
else
{
return YES;
}
}
これを実行すると、ioValue の長さが 0 で、NO が返されることがわかりますが、完了ハンドラが呼び出されません。どんな助けでも素晴らしいでしょう。
UIManagedDocument でエラーの保存を処理する方法、特に情報の保存中にエラーが発生したことを呼び出し元のコードに通知する方法に欠けているものはありますか。