两个控制器之间使用的 NSNotification 正在崩溃

NSNotification used between two controllers is crashing

我正在使用以下代码

First.m:

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

[Second serviceCall:[NSString stringWithFormat:@"%@%@",BASEURL, USER_LOGIN] withParameter:parameters ofType:USER_SIGNIN];

Second.m:

+(void)serviceCall:(NSString*)url withParameter:(NSDictionary*)parameter ofType:(int)type{

AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:url]];  
        --------------line1------------------  
        [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];  
        manager.responseSerializer = [AFJSONResponseSerializer serializer];  
        manager.requestSerializer = [AFHTTPRequestSerializer serializer];
        [manager POST:url parameters:parameter success:^(AFHTTPRequestOperation *operation, id responseObject)  {

            [[NSNotificationCenter defaultCenter] postNotificationName:@"registerToken" object:nil userInfo:nil];---breaking101

}

上面的通知代码被破坏了。如果我写 [[NSNotificationCenter defaultCenter] postNotificationName:@"registerToken" object:nil userInfo:nil]; 在第 1 行,它正在工作。我认为这与某些对象问题有关。请帮忙。我没用过通知中心

您 post 通知名称为:@"registerToken" 并且您正在观察 @"registerTok" 通知。这两个名称必须相同

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

同时添加registerTok方法

-(void)registerTok:(NSNotification*)notification {
  ...
}

这里有一些错误:

  1. 您发送的通知 ("registerToken") 不是您正在收听的通知 ("registerTok")。
  2. 您定义的选择器应该带一个参数 - (NSNotification *),如苹果文档中所述 here
  3. AFHTTPRequestOperationManagerPOST:parameters:success: 方法的成功块在任意线程上执行。您可能希望指定 thread/queue 触发通知时要在其上执行该方法。当您 post 第 1 行的通知有效时,因为该通知是在当前线程上执行的。

P.S。如果您仍然有问题,请添加您收到的错误的完整日志,这样可以更好地回答您的问题。

我认为你没有定义选择器方法 registerTok 那样它就崩溃了。

-(void)registerTok:(NSNotification*)notification {
  ...
}