好吧......我得到了問題解決(或多或少)。我所做的是繼承NSManagedObject和我重寫的方法 - (無效)initWithEntity:insertIntoManagedObjectContext:
@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
它設置在實體的關係「類型」「的Locos」在實體的第一條記錄「LocoType 「其屬性」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
在這種情況下,如果我推這勢必增加一個按鈕:一個陣列控制器(其結合至實體「的Locos」)的我總是得到兩個新的條目!我運行調試器,initWithEntry方法只被調用一次。我刪除行
[context executeFetchRequest:request error:nil];
它還如果取只調用一次因爲在我保存記錄我的靜態變量第一個代碼示例不會發生我也得到儘快消除這個問題。
有沒有人知道會發生什麼?
Awakefrominsert將是一個更好的方法來覆蓋,我認爲。 – jrturton
你好jrturton!這是一種更好的解決方案!謝謝! –
好吧,我會把它作爲一個非常簡短的答案! – jrturton