私はいくつかの C を含む Cocoa プロジェクトに取り組んでおり (objc には C が含まれていることはわかっています...)、NSNotificationCenter
s を理解しようとしています。状況は次のとおりです。
次のように宣言された構造体がありますtypedef struct {/*code here*/} structName;
私の- (id)init
方法では、
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(selName:) name:@"notName" object:nil];
コールバック関数があります:
int callback(/*args*/) {
structName *f = ...
NSAutoreleasePool *autoreleasepool = [[NSAutoreleasePool alloc] init];
[[NSNotificationCenter defaultCenter] postNotificationName:@"notName" object:[[NSValue valueWithPointer:f] retain]];
[autoreleasepool release];
}
そして、私のセレクターのために:
- (void)selName:(NSNotification *)note
{
NSLog(@"here");
NSLog(@"note is %@", note);
}
ここで、その 2 番目をコメントアウトするとNSLog
、すべてが機能しているように見えます (つまり、「ここ」が出力されます)。しかし、そのままにしておくと、何も機能しないNSNotification
ようです。しかし、これは のオブジェクト、userInfo などの目的を無効にしているようNSNotification
です。
私は何を間違っていますか?また、自分の にアクセスできるようにするにはどうすれば修正できますstructName f
か?
@ネイサンさて、今私は持っています
NSDictionary *dict = [NSDictionary dictionaryWithObject:[NSValue valueWithPointer:f] forKey:@"fkey"];//f, not &f. I had a typo in the OP which I fixed.
[[NSNotificationCenter defaultCenter] postNotificationName:@"notName" object:nil userInfo:[dict retain]];
...しかし、問題は残ります。これは私が修正したタイプミスと関係がありますか?
編集:
上記の2行を次のように変更しても問題は続きます
[[NSNotificationCenter defaultCenter] postNotificationName:@"notName" object:nil userInfo:[NSDictionary dictionaryWithObject:[NSData dataWithBytes:f length:sizeof(structName)] forKey:@"fkey"]];