私はCoreDataスタックにカスタムクラスを使用しています。クラスプロパティはモデルで正しく設定されています。 NSManagedObject上でsetValue ...を使うために抽象化されているアプリケーションのいくつかの点がありますが、NSInvalidArgumentExceptionで失敗するケースがいくつかあります。特に、関連オブジェクトを設定するときです。エラーは、特定のタイプが必要であることを示し、NSManagedObjectを取得しているため、エラーです。だから、ある種のエンティティであれば、私はちょうど短いルートをとって、問題のコールの前にインスタンスをキャストすると思った。このような:NSManagedObjectをサブクラス型にキャストする際の問題
NSManagedObject *addressObject = [NSEntityDescription insertNewObjectForEntityForName:@"Address" inManagedObjectContext:[object managedObjectContext]];
if ([[[object entity]name] isEqualToString:@"Hospital"]) {
Contact *contact = (Contact*)object;
DLog(@"The class of contact is: %@", [contact class]);
contact.Address = addressObject;
}
else{
[object setValue:addressObject forKey:@"Address"];
}
私が知っている、住所は大文字すべきではありません。私はこの混乱を継承しました...とにかく、私は完全に連絡先オブジェクトが連絡先だと思いますが、そうではありません、それはNSManagedObjectです!私はキャストに何が間違っていますか?私が見つけたことは、これがキャストする正しい方法だと言いますが、何らかの理由でここで私にとってうまくいきません。もちろん、addressObjectがContactの代わりにNSManagedObjectを取得することについて文句を言っていない場合は、これは必要ではありません(病院はここから連絡を受け継いでいます)。どのようにしてオブジェクトを強制的にタイプコンタクトにすることができますか?それは本当ですか?アプリを終了
*キャッチされない例外により「NSInvalidArgumentException」、理由:「対1の関係のための値の許容できないタイプ:
はここに関連するトレースのプロパティ= 『連絡先』。希望のタイプ=連絡先。指定された型= NSManagedObject;
@dynamic Contact;
たぶん私は必要があります。通常、ダイナミックなどの連絡先の実装と
@property (nonatomic, retain) NSManagedObject * Contact;
:値= ...完全期すため
、Addressクラスは、として連絡先の宣言を持っていますいくつかの睡眠? ;-)ありがとう
ありがとうございました。病院はコンタクトクラスとエンティティを拡張します。だから、もし私がこれをキャストすることができないのであれば、NSManagedObjectを使ってContact属性を設定するときにInvalidArgExcをスローしないようにするにはどうすればよいですか?私はちょうどそれが解決するだろうと右のタイプに管理オブジェクトを鋳造すると仮定し、最も速い解決策でした。再度ありがとう – wkhatch
ああ!カスタムサブクラスはターゲットに追加されませんでした。私はそれを逃したとは信じられません。 NSManagedObjectのサブクラスが常にNSManagedObjectとして返されるような問題が発生したときは、モデルのクラスプロパティを設定しなかったか、クラスがターゲット。ダニエルそれはすべて;-)ダニエルありがとう – wkhatch