【问题标题】:Warning message Attempting to create USE_BLOCK_IN_FRAME variable with block that isn't in the frame警告消息尝试使用不在框架中的块创建 USE_BLOCK_IN_FRAME 变量
【发布时间】:2012-02-23 16:49:50
【问题描述】:

在设置exception breakpoint 和调试时收到 Catchpoint 2(抛出异常)的警告消息。当前语言:自动;目前客观-c 警告:尝试使用不在框架中的块创建 USE_BLOCK_IN_FRAME 变量。 (gdb)

这是什么意思。

在我的例子中,UIToolbar 上的 mainviewcontroller 有 plapause 切换按钮,当点击播放音频文件并使用执行选择器一个接一个地加载 20 个视图控制器

-(void)playpauseAction:(id)sender 
{

 if  

  ([audioPlayer isPlaying]){

 [sender setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateSelected];

 [audioPlayer pause];

  } else {

 [sender setImage:[UIImage imageNamed:@"pause.png"] forState:UIControlStateNormal];

 [audioPlayer play];

 [self performSelector:@selector(displayviewsAction:) withObject:nil afterDelay:11.0];

  }  

}

- (void)displayviewsAction:(id)sender
{
FirstViewController *viewController = [[FirstViewController alloc] init];

viewController.view.frame = CGRectMake(0, 0, 320, 480);

[self.view addSubview:viewController.view];

[self.view addSubview:toolbar];

[self performSelector:@selector(secondViewController) withObject:nil afterDelay:23];

[viewController release];

}

-(void)secondViewController {
SecondViewController *secondController = [[SecondViewController alloc] init];

secondController.view.frame = CGRectMake(0, 0, 320, 480);

[self.view addSubview:secondController.view]; 

[self.view addSubview:toolbar];

[self performSelector:@selector(ThirdviewController) withObject:nil afterDelay:27];

[secondController release];
}

当简单地尝试在模拟器中运行应用程序时,它工作正常,但是当使用异常断点进行调试并点击播放按钮开始调试时会收到此警告消息。

任何人都知道异常断点发生了什么。

【问题讨论】:

    标签: iphone ios5 xcode4.2


    【解决方案1】:

    这是来自调试器的警告,当它无法为特定对象创建任何信息结构时。

    这是一个例子:

    NSString* string = [[NSString alloc] initWithUTF8String:line];
    

    在这行代码中,方法 initWithUTF8String: 需要一个 UTF-8 编码的 C 字符串,而不是一个 NSString 对象。 所以这次编译器会给出USE_BLOCK_IN_FRAME的警告。

    我们应该确保所有警告都得到解决,因为它可能是大错误或应用程序可能在不久的将来崩溃。


    更新:


    -(void)playpauseAction:(id)sender 
    {
    
        UIButton *btn = (UIButton *)sender;
          if([audioPlayer isPlaying]){
    
         [audioPlayer pause];   
    
         [btn setImage:[UIImage imageNamed:@"pause.png"] forState:UIControlStateNormal];
    
          } else {
    
         [audioPlayer play];
         [btn setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];
    
    
    
     [self performSelector:@selector(displayviewsAction) withObject:nil afterDelay:11.0];
    
      }  
    
    }
    
    - (void)displayviewsAction
    {
    FirstViewController *viewController = [[FirstViewController alloc] initWithNibName:"FirstViewController"];
    
    viewController.view.frame = CGRectMake(0, 0, 320, 480);
    
    [self.view addSubview:viewController.view];
    
    [self.view addSubview:toolbar];
    
    [self performSelector:@selector(secondViewController) withObject:nil afterDelay:23];
    
    [viewController release];
    
    }
    
    -(void)secondViewController {
    SecondViewController *secondController = [[SecondViewController alloc] init];
    
    secondController.view.frame = CGRectMake(0, 0, 320, 480);
    
    [self.view addSubview:secondController.view]; 
    
    [self.view addSubview:toolbar];
    
    [self performSelector:@selector(ThirdviewController) withObject:nil afterDelay:27];
    
    [secondController release];
    }
    

    【讨论】:

    • 那么如何解决这个警告
    • 确保您使用的所有方法和对象都是正确和正确的,例如,如果您使用文本字段或表格视图方法,首先确保所有委托都导入到 .h 文件 , 比如果你使用 IB 的 tham 比创建 IBOutlet 和属性,同时你在它们上使用一些 geter 或 setter 方法并在 .m 中合成它们。
    • 我不在我的系统中,所以我现在无法检查所有内容,我会在明天早上回复你,而你可以在我的回复中检查你的代码并更新...
    猜你喜欢
    • 2011-04-07
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多