代码之家  ›  专栏  ›  技术社区  ›  HelenaM

如何使用NSNotificationCenter调用第二个类中的方法?

  •  0
  • HelenaM  · 技术社区  · 11 年前

    我正在尝试使用 NSNotificationCenter 调用第二个类中的方法,但我得到了一个错误:

    第二类方法(request.m):

    -(void)getTheRequest:(NSString *)whereToCall;
    

    我试着从 通知中间 这样地:

    request *newRequest=[[request alloc]init];
    [self performSelector:@selector(newRequest.getTheRequest:) withObject:@"mySite"];
    

    但我在“newRequest.getTheRequest”这一部分中遇到了一个错误,上面写着“预期表达式”。你们中的任何人都知道我该如何解决这个问题,或者我该如何使用 通知中间 调用不同类中的方法?

    2 回复  |  直到 11 年前
        1
  •  1
  •   voromax snakey    11 年前

    试试这个:

    [newRequest performSelector:@selector(getTheRequest:) withObject:@"mySite"];
    

    请注意,根据苹果的编码标准,类名应该从大写字母开始,getter不应该使用get前缀 Introduction to Coding Guidelines for Cocoa

        2
  •  1
  •   btype    11 年前

    我认为您的方法不是基于NSNotificationCenter的。您试图做的是调用请求对象的方法。

    如果那样的话,你会打电话 request 而不是 self :

    request *newRequest=[[request alloc]init];
    [request performSelector:@selector(getTheRequest:) withObject:@"mySite"];
    

    NSNotificationCenter 是这样使用的:

    在目标类中添加观察者:

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getTheRequest:) name:@"getTheRequest" object:nil];
    

    实现目标方法:

    -(void)getTheRequest:(NSString *)string{
      //do something
    }
    

    并在第二类中发布通知:

    [[NSNotificationCenter defaultCenter] postNotificationName:@"getTheRequest" object:@"mySite"];
    

    不要忘记删除目标类中的观察者,如果忘记了它,类对象的保留计数将保持为1,并且不会从内存中释放。

    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"getTheRequest" object:nil];