2010-12-08 16 views
0

私はフレームワーク内のプロパティとしてセレクタを持っています。これはユーザが設定できるプロパティです。ここでフレームワークの質問のセレクタ

は財産だ:@property SEL didBeginBackupSelector;

だから私のクラスでは、私はそれを合成し、このようにそれを実装:

if (self.didBeginBackupSelector != nil) 
{ 
[[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:self.didBeginBackupSelector name:@"backupHasStarted" object:nil]; 
} 

その後、私はフレームワークをコンパイルし、それを実装します。

framework.didBeginBackupSelector = @selector(didBegin:); 

しかし、その代わりに、私のクラスでセレクタを呼び出すのではなく、フレームワークのクラスでdidBegin:を呼び出そうと。

私には何が欠けていますか?

+0

コードスニペットはどこにありますか?それがクラスメソッドの場合、selfはクラスオブジェクトを意味します。クラス階層の詳細を教えてください。 – Costique

+0

あなたはこの通知のブロードキャストも担当しますか? "backupHasStarted"は分散通知の非常に一般的な名前です。 –

+0

私のアプリは通知をポストします。 – Pripyat

答えて

0

コードスニペットでは、selfを参照しています。これは呼び出し元ではなく、フレームワーククラスを参照しています。また、通知に登録した後にdidBeginBackupSelectorが変更された場合、予期したとおりに動作しないという別の問題もあります。あなたの.hで

:あなたの.mで

@property (nonatomic) SEL didBeginBackupSelector; 
@property (nonatomic, assign) id didBeginBackupTarget; 

:私はあなたの代わりに次のような何かを推薦する

// where you first want to register 
// [[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(backupHasStartedNotification:) name:@"backupHasStarted" object:nil]; 

// somewhere else in your file 
- (void)backupHasStartedNotification:(NSNotification *)notification { 
    if (self.didBeginBackupSelector) { 
     [self.didBeginBackupTarget performSelector:self.didBeginBackupSelector withObject:notification]; 
    } 
} 

これは後でもdidBeginBackupSelectorとdidBeginBackupTarget変更した場合は動作します登録。