2015-09-15 55 views
0

請幫我解決這個意外的麻煩。如何檢查視圖是否有標籤?

if (view.tag != nil) 

^^這工作對我來說,但突然我已經分配0標記到視圖,現在一切都壞了。

如何檢查視圖是否分配了標籤?

感謝

回答

6

所有觀點都有一個標記。默認爲零0

這取決於你有什麼。我相信你應該考慮一個帶有標籤的視圖0是一個未被標記的視圖。並從1開始標記。

由於視圖的標記屬性類型爲NSInteger,因此它不能是nilNSInteger是原始類型,因此不能有nil指針。分配給該屬性的默認值將是0

此外,當您將零與0比較時,它會在objective-c中給出YES。那是什麼打破你的邏輯。

if (view.tag != nil)相當於if (view.tag != 0)

+2

我們應該補充說默認值是0,因爲tag是一個基本類型'NSInteger',它不能爲零。 – rckoenes

+1

然後編輯答案 – hasan83

0

標籤是非負值。如果你沒有設置視圖的標籤,那麼它的默認標籤是0.所以,你總是有一個標籤與視圖關聯。

在這方面,如果你設置標籤> 0,那麼你可以檢查

if(tag>0){ 
    //do something 
}else{ 
//this is not your view 

}

但你不能檢查

if (view.tag != nil)// because nil compares with object and if that object not found then return nil. if you compare with it nil value with an integer number it will also return 0. you will get a unexpected result. 
0

有一對夫婦的事情,瞭解:

  1. 標記是一個無符號整數,這是一個原語類型,而nil用於測試未分配的對象類型。
  2. 在這種情況下,編譯器會認爲nil0,這是它不「觸發」的原因。

解決方案:

  1. 分配tag > 0
  2. 使用if (view.tag > 0) { ... }進行測試。