我需要从我的cocoa应用程序发送一个分布式通知到我的firebreath项目,所以我需要在我的firebreath代码中创建一个观察者和一个选择器。我将类扩展名更改为"。,以支持objective-c代码。我已经有objective-c代码在我的firebreath项目,工作正常。但是当我尝试创建一个观察者时,我在代码中得到错误,我不知道如何解决它。
这是我的源代码从firebreath项目:
//This is the selector
- (void)receiveAppConfirmationNotification:(NSNotification*)notif{
//The application is alive.
NSLog(@"The application is alive!!!!!!!!");
}
std::string MyProjectAPI::bgp(const std::string& val)
{
//Add an observer to see if the application is alive.
NSString *observedObject = @"com.test.net";
NSDistributedNotificationCenter *center = [NSDistributedNotificationCenter defaultCenter];
[center addObserver: self
selector: @selector(receiveAppConfirmationNotification:)
name: @"App Confirmation Notification"
object: observedObject];
}
以下是我的错误:
…firebreath/. ./项目/MyProject/MyProjectAPI。Mm:133:错误:'-'标记前预期的非限定id。这是我定义"receiveAppConfirmationNotification"方法的行。
…firebreath/. ./项目/MyProject/MyProjectAPI。在这个作用域中没有声明'self'。
如何定义选择器?如何添加观察者作为类本身?
选择器必须是objective-c++类的一部分;你不能把它丢到某个地方,它应该在类的@implementation部分。
为了尽可能保持兼容,我建议将@interface和@implementation部分放在。mm文件中,以便。h文件与c++兼容,但这取决于您;这样做会更容易些。如果你愿意,你可以使用痘痘图案来帮助你。
我做了接口和实现,代码没有错误。问题是,我能够发送通知到我的可可应用程序,但我不能从应用程序到插件收到通知。这是头文件:
#ifdef __OBJC__
@interface FBMyProject : NSObject {
NSString *parameter_val;
}
@property (nonatomic, retain) NSString *parameter_val;
-(void) receiveAppConfirmationNotification:(NSNotification*)notif;
@end
#endif
class MyProjectAPI : public FB::JSAPIAuto
{
public:
...
}
#endif
这是我的源文件:
@implementation FBMyProject
@synthesize parameter_val;
-(void) receiveAppConfirmationNotification:(NSNotification*)notif{
//The application is alive.
NSLog(@"The application is alive!!!!!!!!");
}
- (id)init
{
self = [super init];
if (self) {
NSString *observedObject = @"test.com";
NSDistributedNotificationCenter *center = [NSDistributedNotificationCenter defaultCenter];
[center addObserver: self
selector: @selector(receiveAppConfirmationNotification:)
name: @"App Confirmation Notification"
object: observedObject];
}
return self;
}
- (void)dealloc
{
// unregister notification
[[NSDistributedNotificationCenter defaultCenter] removeObserver: self
name: @"App Confirmation Notification"
object: nil];
[self.parameter_val release];
[super dealloc];
}
@end
std::string MyProjectAPI::bgp(const std::string& val)
{
FBMyProject *my_project = [[FBMyProject alloc] init];
my_project.parameter_val = [NSString stringWithUTF8String:val.c_str()];
[my_project release];
return val;
}
这是我从cocoa应用程序的源代码:
NSDictionary *data = [NSDictionary dictionaryWithObjectsAndKeys:
@"OK", @"confirmation",
nil];
//Post the notification
NSString *observedObject = @"test.com";
NSDistributedNotificationCenter *center = [NSDistributedNotificationCenter defaultCenter];
[center postNotificationName: @"App Confirmation Notification"
object: observedObject
userInfo: data
deliverImmediately: YES];