两个控制器之间使用的 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 {
...
}
这里有一些错误:
- 您发送的通知 ("registerToken") 不是您正在收听的通知 ("registerTok")。
- 您定义的选择器应该带一个参数 -
(NSNotification *)
,如苹果文档中所述 here
AFHTTPRequestOperationManager
的POST:parameters:success:
方法的成功块在任意线程上执行。您可能希望指定 thread/queue 触发通知时要在其上执行该方法。当您 post 第 1 行的通知有效时,因为该通知是在当前线程上执行的。
P.S。如果您仍然有问题,请添加您收到的错误的完整日志,这样可以更好地回答您的问题。
我认为你没有定义选择器方法 registerTok 那样它就崩溃了。
-(void)registerTok:(NSNotification*)notification {
...
}
我正在使用以下代码
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 {
...
}
这里有一些错误:
- 您发送的通知 ("registerToken") 不是您正在收听的通知 ("registerTok")。
- 您定义的选择器应该带一个参数 -
(NSNotification *)
,如苹果文档中所述 here AFHTTPRequestOperationManager
的POST:parameters:success:
方法的成功块在任意线程上执行。您可能希望指定 thread/queue 触发通知时要在其上执行该方法。当您 post 第 1 行的通知有效时,因为该通知是在当前线程上执行的。
P.S。如果您仍然有问题,请添加您收到的错误的完整日志,这样可以更好地回答您的问题。
我认为你没有定义选择器方法 registerTok 那样它就崩溃了。
-(void)registerTok:(NSNotification*)notification {
...
}