私はコアデータを使用するアプリケーションを持っており、UIManagedObjectを使用してManagedObjectContextを取得しています。読んでから、私はコンテキストを直接保存するとは思わないと思います。むしろ、UIManagedObjectの自動保存に依存するかsaveToURLを使用する必要があります:...私の問題は、自分のエンティティに格納されているデータを検証することです。エンティティには、文字列プロパティの最小長が1であることを指定する制約があります。ただし、新しいオブジェクトを作成し、そのプロパティに空の文字列を割り当て、ファイルを保存できます。 saveToURLの完了ハンドラでは... ...常に成功した値を返します。私は自分のエンティティのnameプロパティのための自分のバリデータを作成しました。私はコアデータ・プログラミング・ガイドからのサンプルコードを使用 -UIManagedDocument - コアデータエンティティの検証
-(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でエラーを保存する方法については、特に情報を保存するときにエラーが発生したことを通知する方法がありますか?