これは非常に基本的な質問に思えるかもしれませんが、基本的な質問を説明(および理解)することが、クリーンで機能するコードを構築するための鍵であると常に考えていました。CoreDataエンティティに次のコードフラグメントがあります。
-(BOOL)validateForInsert:(NSError *__autoreleasing *)error {
[super validateForInsert:error];
return [self validateInternal:error];
}
-(BOOL)validateInternal:(NSError *__autoreleasing *)error {
// checking attributes and build userInfo error
if(anyErrors) {
*error = [NSError errorWithDomain:appDomain code:200 userInfo:details];
return NO;
}
return YES;
}
Xcodeで「analyze」を実行すると、エラーの作成時に有名な「潜在的なnull逆参照」が発生します。コンパイラがアラートを出していない間、コードは常に機能しています。これも質問になる可能性がありますが、なぜコンパイラがそれについて警告しないのですか?
しかし、コードに来ると、(エラー!= nil)かどうかをチェックするという解決策を完全に知っていますが、これにはかなり迷っています。質問は最初から始まり、NSError * _autoreleasing *の意味で、なぜ周囲の星ですか?どちらがポインタへのポインタである必要がありますか?
validateForInsertを呼び出したいと仮定します。自分で*_autoreleasing*オブジェクトを作成するにはどうすればよいですか?
次の質問は、上記の質問に関連していると思います。*エラーを最初から作成している場合、なぜ最初にnilかどうかを確認する必要があるのでしょうか。
最後になりましたが、コードは正常に機能し、エラーが傍受されます。失敗またはクラッシュする可能性のあるケースを見つけてください。CoreDataを使用していると言ったように、一般的な例で十分ですが、CoreDataに関連する別の例をいただければ幸いです。
ありがとう