需要在我的Firebreath项目中添加一个NSDistributedNotification观察者



我需要从我的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];

相关内容

  • 没有找到相关文章

最新更新