2012-09-10 34 views
1

我有像下面的調用堆棧的崩潰報告。由於我無法重新發現錯誤,我必須猜測發生了什麼。什麼是__NSBlockVariable__以及爲什麼它會發生無法識別的選擇器發送給實例錯誤?

NSInvalidArgumentException 
--------------------- 
-[__NSBlockVariable__ profile_data]: unrecognized selector sent to instance 0xab2f620 
--------------------- 
0 CoreFoundation 0x378688a7 __exceptionPreprocess + 186 
1 libobjc.A.dylib 0x35d6e259 objc_exception_throw + 32 
2 CoreFoundation 0x3786ba9b -[NSObject doesNotRecognizeSelector:] + 174 
3 CoreFoundation 0x3786a915 ___forwarding___ + 300 
4 CoreFoundation 0x377c5650 _CF_forwarding_prep_0 + 48 
5 TouchPalDialer 0x0005096f -[InfoEditViewControllerNew textFieldDidEndEditing:] + 134 

扔崩潰的代碼應該是這樣的

profile_data_manager.profile_data.name = [textField.text stringByTrimmingCharactersInSet:whitespace]; 

的profile_data_manager是可以肯定的是類類型ProfileDataManager的,而且可以肯定的是擁有財產@財產(非原子,保留) ProfileModel * profile_data;

我不知道爲什麼profile_data_manager變成了NSBlockVariable,以及它爲什麼不識別profile_data。

我看到這篇文章Calling delegate method, unrecognized selector because sending to wrong object,說改變nonatomic原子解決了他的問題。

我不確定我的崩潰是否有相同的原因。如果任何人都可以向我展示一些有關NSBlockVariable的資源解釋,那將是非常好的,所以我可以更好地理解原因。

謝謝!

回答

0

您的項目是否使用ARC?我假設沒有。確保你沒有過度釋放profile_data_manager

根據我的經驗,這種類型的錯誤意味着一個對象已經過早釋放,並且它的內存已被重用來保存一個新對象的實例。在這種情況下,一個NSBlockVariable的實例。

您可以嘗試在項目上執行Analyze構建以查找可能的refcount(保留/釋放)錯誤。

您也可以嘗試在開啓殭屍的情況下運行您的項目...(請參閱樂器中的分配工具並啓用殭屍選項)。這可以跟蹤裁減計數錯誤。 (假設這個是一個refcount錯誤)......但似乎很可能。

0

因爲您的對象準備由ARC發佈。爲了解決這個問題,確保你把變量放在全局變量中,所以,它只在父對象釋放時釋放。

相關問題