[英]Is it necessary to receive a NSNotification when adding an observer?
這是東西。
每當我看到一個與網絡相關的iPhone的示例-ipad dev時,我都會看到每次控制器為通知注冊其自身時,回調方法都類似於:
-(void)mymethod:(NSNotification *)notification {
//Bla Bla
}
與按鈕動作相同..總是喜歡:
- (void)actionmethod:(id)sender {
//Bla Bla
}
我只是做了一些測試,無論有沒有參數,該方法都會被調用。 這真的有必要嗎? 是什么原因?
謝謝 !!!
notificationSelector
選擇器,它指定接收方發送通知消息的消息,通知服務器將通知發布通知給它。 notificationSelector指定的方法必須只有一個參數(NSNotification
一個實例)。
[強調我的]
您必須為選擇器提供正確的簽名; 如果您不這樣做,它可能會起作用,但可能只是在您不希望它停止時才停止工作。
您可能想要獲取通知的原因是,您可以使用userInfo
字典的形式傳遞信息,您可以在自己使用notificationWithName:object:userInfo:
發布通知時指定該notificationWithName:object:userInfo:
。 您可以在調用方法時忽略參數,但是參數必須在方法簽名中。
至於按鈕及其動作, 文檔說您可以擁有以下三個簽名之一:
UIKit框架允許三種不同形式的動作選擇器:
- (void)action
- (void)action:(id)sender
- (void)action:(id)sender forEvent:(UIEvent *)event
IBAction
返回類型等效於void
(沒有返回值),除了它在標頭中的方法中存在之外,它使Interface Builder知道該方法旨在用作操作,以便您可以掛接控件。
想要獲取按鈕(或其他控件)的原因與通知類似。 如果您的界面中有許多按鈕,其中一些按鈕(例如在表格視圖中)連接到同一操作,則可能需要通過按按鈕的標識來區分您所做的確切操作。
*:出於完整性考慮,我想提一下Mac 並非如此; 在那里,操作方法必須采用以下形式- (IBAction)action:(id)sender
。
當我發現可以不帶任何參數地調用這些方法時,我只是這樣做。 在大多數情況下,它運行良好,但在某些情況下,它顯示了NSInvalidArgumentException
。 最好只是出於安全考慮而提及這些論點。
這是一個不使用參數導致應用程序崩潰的示例:
根據蘋果文件。 iOS中按鈕的接收方可以是-(void)action,-(void)action:(id)sender。 並且通知還可以具有參數NSNotification或沒有參數。 這取決於您的需求。
例如,我需要通過通知傳輸UIImage,因此將UIImage添加到NSNotification的userInfo字典中。 與發件人相同,如果我需要發件人一些屬性,則我將添加(id)sender作為參數。 通常,我喜歡為-(id)sender或NSNotification添加這些參數。 如果我需要通知或發送者的某些信息,則無需更改原始方法,因為它們已經具有發送者或通知對象來獲取所需信息。
更新必須添加NSNotification參數。 參考文件鏈接 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.