iOS目标c执行选择器未执行该方法

iOS目标c执行选择器未执行该方法,ios,objective-c,xcode,segue,Ios,Objective C,Xcode,Segue,实际上,我在url请求块中使用了执行选择器,起初它工作正常,但现在它没有执行该函数 执行选择器功能为 NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; // you need to convert to dictionary object NSLog(@"requestReply: %@", jsonDict);

实际上,我在url请求块中使用了执行选择器,起初它工作正常,但现在它没有执行该函数

执行选择器功能为

       NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; // you need to convert to dictionary object
        NSLog(@"requestReply: %@", jsonDict);
        self.tmp=[jsonDict valueForKey:@"otp"] ;
        self.str=self.tmp;
        NSLog(@"tmp storage inside block:%@",self.tmp);
      //  [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateStatus) userInfo:nil repeats:YES];
        [self performSelector:@selector(updateStatus) withObject:self afterDelay:1.0];
    }] resume];
}
更新状态方法是

-(void)updateStatus{
NSLog(@" storage:%@",self.str);
NSLog(@"tmp storage:%@",self.tmp);
[ self performSegueWithIdentifier:@"b1" sender:self];
}

由于它没有执行,我无法执行segue,应用程序停留在同一页面上

您必须传入响应指定选择器的相关对象。传递
nil
将向nil发送消息,而不执行任何操作。 假设在调用
performSelector
的同一类中声明了
updateStatus
方法,则可以执行以下操作:

[self performSelector:@selector(updateStatus) withObject:self afterDelay:0.1];

performSelector
如果从后台线程调用,它将不工作。试试这个

dispatch_async(dispatch_get_main_queue(), ^(void){
    //Run UI Updates
    [self performSelector:@selector(updateStatus) withObject:nil afterDelay:0.1];
});

简单,在主线程中更新您的UI

  dispatch_async(dispatch_get_main_queue(), ^{
        [self performSelector:@selector(updateStatus) withObject:nil afterDelay:0.1];
         });
选项2

或者创建简单的方法

       NSLog(@"tmp storage inside block:%@",self.tmp);
        [self updateStatus];
并在主线程中调用该方法

-(void)updateStatus{
NSLog(@" storage:%@",self.str);
NSLog(@"tmp storage:%@",self.tmp);
dispatch_async(dispatch_get_main_queue(), ^{
    [ self performSegueWithIdentifier:@"b1" sender:self];
});
}
更新代码

 NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    [[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
       // NSString *requestReply = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; // this is json string
        //   NSError *error;
        NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; // you need to convert to dictionary object
        NSLog(@"requestReply: %@", jsonDict);
        self.tmp=[jsonDict valueForKey:@"otp"] ;
        self.str=self.tmp;
        NSLog(@"tmp storage inside block:%@",self.tmp);
        dispatch_async(dispatch_get_main_queue(), ^{
            [self performSelector:@selector(updateStatus) withObject:nil afterDelay:0.1];
        });

    }] resume];
并将该方法称为

 -(void)updateStatus{
NSLog(@" storage:%@",self.str);
NSLog(@"tmp storage:%@",self.tmp);
[ self performSegueWithIdentifier:@"b1" sender:self];


}

尝试
[自执行选择器:@selector(updateStatus)with object:nil afterDelay:1.0]


选择器
没有参数,
withobject
是SEL的参数,因此对象应为零。

延迟秒值太小。请将其增加到0.1到0.3或plus@Bilal是更新状态在同一类中!!bt仍然无法执行@JitendraModi我刚开始使用的是1.0,当时也是1.0,你是从主线程调用这段代码吗?所有UI(包括分段)都必须在主队列上完成。(顺便说一句,你看到你的
NSLog
语句了吗?@Rob这实际上是一个按钮动作,我正在执行一个url请求,我正在url会话结束时执行此操作!!是的方法在同一个视图控制器中,但它仍然没有执行我使用的updatestatus块??是的,让我试试!!为什么使用性能选择器:withObject:afterDelay:
?在之后使用
dispatch\u。