2011-10-17 96 views
1

所以我最近升級到XCode 4.2,部分原因是我需要IOS 5 SDK。奇數XCode 4.2和核心數據行爲

無論如何,當我編譯並嘗試運行我的應用程序時,我發現它不再運行。這是因爲Core Data實體中的屬性現在被標記爲只讀。

我沒有這樣做,除了錯誤信息之外,我找不到任何證據。

在我的核心數據管理對象,稱爲注:

@interface Note : NSManagedObject 
@property (nonatomic, retain) NSString * title; 
... 


@implementation Note 
@dynamic title; 
... 

後來 - 和其他地方 - 在代碼中,我試圖做到這一點:

self.note.title=self.noteTitle.text; 

當執行到達此行,我收到這些錯誤:

Property 'title' is marked readonly on class 'Note'. Cannot generate a setter method for it. 
-[Note setTitle:]: unrecognized selector sent to instance 0x80ae3d0 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Note setTitle:]: unrecognized selector sent to instance 0x80ae3d0' 

什麼????我可以手動編碼setter - 錯誤表示它不能爲我生成一個 - 但我真的很想了解這裏發生了什麼。

我沒有重新生成這個實體的管理對象文件,這沒有奏效。我也創建了一個新的數據模型,並進行檢查以確保沒有設置不應該設置的內容。

編輯:我遺漏了什麼竟然是一個重要的珍聞:我有一個在Note(託管對象)上定義的類別。在類別中,我向對象添加了一個協議(MKAnnotation)。我的類別是這樣定義的:

@interface Note (Extras) <MKAnnotation> 

我已經刪除了'需求'的協議,但沒有刪除引用。當我這樣做時,一切都回到了原來的樣子。

所以,雖然我已經解決了我的問題,但我還是想知道:將協議添加到託管對象是否行爲不當?

謝謝。

+0

你有沒有嘗試重命名「標題」屬性到別的東西?有時我會在使用某些屬性名稱時收到錯誤消息。也許用noteTitle試試吧。 –

+0

嗯,我可以。它在升級之前工作得很好。我想這可能是蘋果改變了保留字列表,但是在相對較小的版本變化中呢? – Chris

+0

我解決了這個問題。可能,我沒有提到我應該擁有的一切。我編輯了這個問題以包含額外的信息。 – Chris

回答

2

NSManagedObject添加協議並不差,有很多原因會導致你想要。