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

时间:2016-05-24 09:45:55

标签: ios objective-c afnetworking nsuserdefaults nsnotificationcenter

我正在使用以下代码

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

}

上面的通知代码正在破裂。如果我写 第1行[[NSNotificationCenter defaultCenter] postNotificationName:@"registerToken" object:nil userInfo:nil];,它正在运行。我认为这与一些对象问题有关。请帮忙。我从未使用过通知中心。

3 个答案:

答案 0 :(得分:2)

这里有一些问题:

  1. 您发送的通知(" registerToken")不是您正在收听的通知(" registerTok")。
  2. 您定义的选择器应采用一个参数 - (NSNotification *),如Apple doc here
  3. 中所述
  4. POST:parameters:success:的{​​{1}}方法的成功块在任意线程上执行。您可能希望在触发通知时指定要在其上执行方法的线程/队列。当您在第1行发布通知时,它会起作用,因为该通知是在当前线程上执行的。
  5. P.S。如果您仍然遇到问题,请添加您收到的错误的完整日志,然后可以更好地回答您的问题。

答案 1 :(得分:0)

您使用姓名发布通知:@" registerToken"你观察@" registerTok"通知。这两个名字必须相同

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

还要添加registerTok方法

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

答案 2 :(得分:0)

我认为你没有定义选择器方法registerTok,因为它崩溃了。

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