2014-09-19 33 views
5

我的應用程序完全正常工作,直到我下載新的Xcode,現在它攔住錯誤「信號SIGABRT」,並點這個:廣東話推出應用6

[PlaceHolder setDescription:]: unrecognized selector sent to instance 0x79838900 
    Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[PlaceHolder setDescription:]: unrecognized selector sent to instance 0x79838900' 

我知道,這些信息可能不足以瞭解發生了什麼,但我不知道從哪裏開始搜索。如果setter方法出現錯誤,爲什麼我的應用程序之前工作?是否有任何阻止應用程序啓動的新更改?

PlaceHolder是一個對象,它保存屬性(如圖像鏈接,文本等)。 此外,還有一個新的「黃色」警告 - Auto property synthesis will not synthesize property 'description' because it is 'read-write' but it will be synthesized 'read-only' via another property

+1

你的應用程序的乾淨derevied數據文件夾 - >組織者 - >項目 - >您的應用程序。 ' – 2014-09-19 05:37:44

+1

'description'是你自定義類的字段嗎?如果你可以重命名它,那麼描述似乎被用在os的某處,就像關鍵字一樣。 – 2014-09-19 05:39:13

回答

10

看起來您已經定義了description屬性。不幸的是NSObject已經有一個description方法。既然你可能不是故意試圖在你的子類中重寫這個方法,這可能不是一個安全的操作。它看起來像在iOS 7 SDK和Xcode 5中,您的屬性取代了NSObject上的方法。在iOS 8 SDK和Xcode 6中,情況並非如此(可能是因爲定義-description方法的方式發生了變化),因此您會得到不同的行爲。

考慮重命名此屬性以避免此類衝突。 description是一個有用的調試工具,你可能不想放棄這個類的意外。

+0

看起來'description'確實成爲iOS 8中的一個屬性:http://www.redwindsoftware.com/blog/post/2014/08/20/NSObject-has-some-new-properties-in-iOS-8。 aspx – Jonah 2014-09-19 05:51:07

+0

謝謝澄清Jonah! – 2014-09-19 06:00:23

8

非常感謝您的幫助。

說明是佔位符類的屬性:

@property (nonatomic, retain) NSString *description; 

問題解決了乾脆把@synthesize description;實施(.M)佔位符類的文件。出於某種原因,新的Xcode通過「只讀」屬性合成它,並導致SIGBART錯誤,因爲應用程序試圖寫入此屬性(由於某種原因只讀)。

我希望這些信息可能對面臨類似問題的人有所幫助。

+1

我正在使用名爲「name」的屬性,並且遇到了同樣的問題。在這個原因中,我特別使用了這個變量的自定義功能(而不是重寫描述),所以這個答案解決了我的問題。 – ColdLogic 2014-09-19 18:10:45

+0

很高興我能幫到你ColdLogic – 2014-09-20 18:28:58

+0

這雖然有多安全?我們會遇到問題嗎? – raulriera 2014-11-14 10:13:48