所以我最近升級到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>
我已經刪除了'需求'的協議,但沒有刪除引用。當我這樣做時,一切都回到了原來的樣子。
所以,雖然我已經解決了我的問題,但我還是想知道:將協議添加到託管對象是否行爲不當?
謝謝。
你有沒有嘗試重命名「標題」屬性到別的東西?有時我會在使用某些屬性名稱時收到錯誤消息。也許用noteTitle試試吧。 –
嗯,我可以。它在升級之前工作得很好。我想這可能是蘋果改變了保留字列表,但是在相對較小的版本變化中呢? – Chris
我解決了這個問題。可能,我沒有提到我應該擁有的一切。我編輯了這個問題以包含額外的信息。 – Chris