2009-11-16 22 views
2

我將在我的應用程序中使用NSNotifications來解耦代碼。定義不帶耦合的NSNotification用法的名稱字符串

我希望編譯器在使用字符串作爲通知的名稱時可以幫助我,也就是說,如果我輸錯一個字符串,我希望編譯器告訴我。

對此使用普通字符串將無法正常工作,因爲編譯器將不知道如果我輸入"myNotificaion",我的意思是"myNotification"

這樣做的一種方法是使用#defines或const NSString變量,但這意味着它們將不得不在文件中聲明,或者是它們源自的類或全局包含的文件。

讓他們在類中聲明的問題是它需要包含在通知被監聽的任何地方,因此創建一個我不想要的耦合。

全局文件的問題是,它可能會變得漫長而雜亂,並將包含許多不相關的東西。

有沒有辦法做到這一點沒有這種耦合或untidiness?

+0

Cocoa框架使用NSString * const變量。 – 0xced 2009-11-18 10:14:23

回答

1

不,據我所知,#defines和NSString常量是它的位置,你不能在任何需要訪問字符串的文件中包含這些常量。

您可以爲應用程序的不同部分創建頭文件,例如,您可能有JJDocumentNotifications.hJJViewNotifications.h。然後,您可以#IMPORT他們進入你的預編譯的頭(.PCH)文件,因此該文件看起來是這樣的:

#import <Cocoa/Cocoa.h> 
#import "JJDocumentNotifications.h" 
#import "JJViewNotifications.h" 

這樣一來,頭會自動包含在所有的文件在你的目標和你贏了不需要專門導入它們。

+0

是的,這是我目前的解決方案。它似乎相當adhoc ...我希望有一個更優雅的方式來做到這一點:( – Jasarien 2009-11-18 00:09:05

+0

NSString常量的最大缺點是,如果我只包含.h文件,有關於「未使用的變量」的編譯器警告能夠發送單個通知。 – 2009-12-10 22:02:36

相關問題