【问题标题】:Heeelp! Debugger says "out of scope"!高跟鞋!调试器说“超出范围”!
【发布时间】:2010-01-18 22:57:34
【问题描述】:

我只是无法想象问题到底是什么。 我做了一个漂亮的应用程序,并决定只使用 CALayers 来“渲染”。

当我看到位置属性的变化被动画化时,决定实现一个名为 tanCenter 的自定义 getter-setter “抽象”属性来设置位置而不动画化。

-(void) setTanCenter: (CGPoint) sentCenter
{   
    //Remove any transactions.
    [CATransaction begin];
    [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
        //Set position.
        self.position = sentCenter;
    [CATransaction commit];

    //Set value.
    tanCenter = sentCenter;
}
-(CGPoint) tanCenter { return tanCenter; }

自从我将它合并到项目中后,它崩溃而没有任何“可理解的”(对我而言)错误消息。我只能看到那些“超出范围”-s。我什至无法在不崩溃的情况下获得这个 tanCenter 属性 NSLog-ged。

帮帮我,欧比旺·克诺比;你是我唯一的希望。

【问题讨论】:

  • 为什么不发布崩溃签名?
  • 什么意思?日志窗口中没有任何消息。
  • 我只看到调试器有很多内存地址、变量,有些变量有文字:“超出范围”。我无法阅读更多信息(也许这是主要问题......)。
  • 您说发生了崩溃,我们可以使用该信息帮助您调试
  • 感谢您的帮助,很高兴看到您的回答。但无法想象你要我出口什么。如果我按下调试器中的跳过按钮,我可以在日志中看到“EXC_BAD_ACCESS”,仅此而已。

标签: iphone debugging scope position calayer


【解决方案1】:

如果您在调试器中运行 (Command-Y) 并确保您有 global breakpoints enabled,则调试器应停止在发生崩溃的地方,让您了解什么是 nil 或过度释放。

【讨论】:

    【解决方案2】:

    嘿,到目前为止,我遇到了同样的问题。在调查了 2 周的错误跟踪后,我终于找到了我的错误(真的很糟糕

    也许我的问题对你有帮助:

    我从单击另一个视图时打开的 TableView 开始。所以我创建于:

    -(void)tableView:didSelectRowAtIndexPath:
    

    首先是另一个视图的控制器并设置全局变量的值:

    SomeView *dtview = [[SomeView alloc] initWithNibName:@"SomeView" bundle:nil];
    dtview.lblTitle = cl.textLabel.text; // cl is the cell
    [self presentModalViewController:dtview animated:NO];
    [dtview release];
    

    于是打开了另一个视图,做了很多占用大量内存的功能:)

    当我之后关闭另一个视图并返回表格并滚动几次时,应用程序会终止并显示“超出范围”消息

    我搜索了非常非常长的时间来找出效果。似乎当另一个视图被释放时,第一个表的文本也被释放了。

    将副本放入通话后,它对我有用:

    dtview.lblTitle = [cl.textLabel.text copy];
    

    对于 int 和 bool,第一个解决方案可以正常工作,因为它们不是对象,但对于 NSObject,您应该将值复制到另一个视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 2018-07-24
      • 2012-01-25
      • 1970-01-01
      • 2011-09-26
      • 2023-03-27
      相关资源
      最近更新 更多