大丈夫...問題が解決しました(多かれ少なかれ)。私がやったことはNSManagedObjectのサブクラスを作成することであり、私はこの方法オーバーライド - (無効)initWithEntity:LocoType」実体の最初のレコードに
@implementation Locos
static NSManagedObject *defaultType;
- (id)initWithEntity:(NSEntityDescription *)entity insertIntoManagedObjectContext:(NSManagedObjectContext *)context
{
self=[super initWithEntity:entity insertIntoManagedObjectContext:context];
if(self==nil)
{
[self release];
return(nil);
}
if(defaultType==nil)
{
NSEntityDescription* locoType=[NSEntityDescription entityForName:@"LocoType" inManagedObjectContext:context];
if(locoType==nil) return(self);
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:locoType];
NSPredicate *predicate=[NSPredicate predicateWithFormat:@"Default==TRUE"];
[request setPredicate:predicate];
[context executeFetchRequest:request error:nil];
NSArray *array=[context executeFetchRequest:request error:nil];
defaultType=[array objectAtIndex:0];
}
if(defaultType!=nil)
{
[self setPrimitiveValue: defaultType forKey:@"Type"];
}
return(self);
}
@end
それは実体に関係「タイプ」を設定「ロコスを」:insertIntoManagedObjectContext "Default"属性がtrueに設定されています。それは動作しますが、私が理解していないことがあります。この場合には
@implementation Locos
- (id)initWithEntity:(NSEntityDescription *)entity insertIntoManagedObjectContext:(NSManagedObjectContext *)context
{
self=[super initWithEntity:entity insertIntoManagedObjectContext:context];
if(self==nil)
{
[self release];
return(nil);
}
NSEntityDescription* locoType=[NSEntityDescription entityForName:@"LocoType" inManagedObjectContext:context];
if(locoType==nil) return(self);
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:locoType];
NSPredicate *predicate=[NSPredicate predicateWithFormat:@"Default==TRUE"];
[request setPredicate:predicate];
[context executeFetchRequest:request error:nil];
NSArray *array=[context executeFetchRequest:request error:nil];
[self setPrimitiveValue: [array objectAtIndex:0] forKey:@"Type"];
return(self);
}
@end
私は追加するバインドされているボタンを押した場合、::私はに方法を簡素化する場合、私は非常に奇妙な効果を得る(エンティティ「ロコス」にバインドされている)アレイコントローラの私はいつも2つの新しいエントリを得る!私はデバッガを実行し、メソッドinitWithEntryは一度だけ呼び出されます。私は、レコードI静的変数を格納する最初のコード例のように一度だけ呼び出されたフェッチの場合にも発生しませんライン
[context executeFetchRequest:request error:nil];
を削除するように私はまた、すぐに問題を取り除きます。
誰でも何が起こるか考えていますか?
Awakefrominsertは上書きするためのより良い方法だと私は思います。 – jrturton
こんにちはjrturton!それは良い方法です!ありがとう! –
さて、私は非常に短い答えとしてそれを置くよ! – jrturton