0

私はコアデータを使用するアプリケーションを持っており、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でエラーを保存する方法については、特に情報を保存するときにエラーが発生したことを通知する方法がありますか?

答えて

0

新しいファイルを作成するには、saveToURLを呼び出す必要があります。自動保存で残りの処理を行います。

また、私はあなたの質問に従うか分からない。保存の失敗を知る方法を尋ねる場合は、通知を登録するだけです(すべての保存はバックグラウンドスレッドで行われるため)。ドキュメントから直接

はUIDocumentオブジェクトは、そのライフサイクルの任意の時点で特定の状態を持っています。 documentStateプロパティを照会すると、現在の状態を確認できます。そして、UIDocumentStateChangedNotification通知を観察することによって、ドキュメントの状態の変化を通知することができます。

関連する問題