2013-02-28 35 views
2

我已將所有NSManagedObject的自定義邏輯放在一個類別中,以便在模型更改時能夠從模型中重新生成標準類。類別中的自定義NSManagedObject setter

一種這樣的片我需要邏輯的是對對象的屬性中的一個自定義設定器:

- (void) setName:(NSString *)name 
{ 
    [self willChangeValueForKey:@"name"]; 
    [self setPrimitiveValue:name forKey:@"name"]; 
    [self didChangeValueForKey:@"name"]; 
    NSLog(@"name was changed");//for example 
} 

我已經把這個類別中的,在這種情況下是Item+Custom.m

我的問題:

爲什麼每當我設置一個項目的名稱,它是而不是需要導入Item + Custom.m?上面的日誌聲明仍然激發。

只是好奇,發送消息的類如何不需要知道邏輯的類別仍然會觸發?

而且(也許是一個單獨的問題)如果我將同一個自定義setter與不同的日誌記錄語句添加到同一對象上的第二個類別,會發生什麼?

+0

您的類別是在模型的'.h'文件中聲明的嗎? – 2013-02-28 20:51:30

+0

否 - 假設您的意思是'它是在由核心數據生成的.h中聲明的。 – 2013-02-28 20:54:05

回答

4

加載程序時,所有類別方法都會被運行時所知。所以如果你聲明一個-[Item setName:]方法,那麼Core Data不會在運行時再創建這個方法。

無需導入任何內容,因爲name已在Xcode生成的託管對象子類文件中聲明爲@dynamic屬性。

如果兩個類別聲明相同的方法,或者如果類別中聲明的方法名稱與原始類中的方法名稱相同,則行爲未定義,請參見「使用Objective-C編程」中的Avoid Category Method Name Clashes

相關問題