2014-11-25 24 views
1
- (id) firstResponder: (UIView *) navView { 
      for (id aview in [self allSubviews:navView]) { 
       if ([aview isKindOfClass:[UITextField class]] && [(UITextField *)aview isFirstResponder]) { 
        return (UITextField *)aview; 
      } 
      else if ([aview isKindOfClass:[UITextView class]] && [(UITextView *)aview isFirstResponder]) { 
       return (UITextView *)aview; 
      } 
     } 
     return NO; 
    } 

得到一個錯誤的指針的此警告初始化:類型的「id」的指針爲NULL的初始化從恆定布爾表達式在IOS 8.得到類型的「id」

+0

將「return NO」替換爲「return nil」.Coz「NO」不是對象。 並且id是Objective C中任何對象的數據類型。 – 2014-11-25 09:28:33

回答

6

變化:

return NO; 

到:

return nil; 

NO是一個布爾值和編譯器抱怨它作c反轉爲輸入id以便返回)。

+0

請注意,'NO'實際上是'0','nil'也是'0',所以'return NO;'會執行得很好,但編譯器抱怨是因爲它認爲你犯了一個錯誤。 – 2014-11-25 08:32:11

+0

@AbhiBeckert是的,它是一個編譯器*警告*,如OP所述。 – trojanfoe 2014-11-25 08:34:16

0

有關更改執行有點如下...

在這個你不用擔心什麼NOnilnull等,爲idinteger甚至沒有警告將被編譯器被拋出。

- (id) firstResponder: (UIView *) navView { 
    UIView *view = nil; 
    for (id aview in [self allSubviews:navView]) { 
     if ([aview isKindOfClass:[UITextField class]] && [(UITextField *)aview isFirstResponder]) { 
      view = (UITextField *)aview; 
     } 
     else if ([aview isKindOfClass:[UITextView class]] && [(UITextView *)aview isFirstResponder]) { 
      view = (UITextView *)aview; 
     } 
    } 
    return view; 
} 
相關問題