Xcode调试器(适用于iPhone)的“超出范围”是什么意思?

时间:2010-11-10 16:41:22

标签: iphone objective-c ios

点击UITableView中的行时,我正在加载文章的详细视图。单击时,它会使用数据加载对象,然后将该对象传递给正在堆栈上推送的下一个控制器。但是,当我这样做时:

- (void)showArticle
{
    [aTitle setText:[[self article] title]];
    [aTitle setBackgroundColor:[UIColor clearColor]];
    [[self view] addSubview:aTitle];

    [aCategory setText:[[self article] category]];
    [aCategory setBackgroundColor:[UIColor clearColor]];
    [[self view] addSubview:aCategory];

    [aAuthors setText:[[self article] authors]];
    [aAuthors setBackgroundColor:[UIColor clearColor]];
    [[self view] addSubview:aAuthors];
}

title显示正常,但categoryauthors未显示。当我调试时,当我查看类别/作者的值时,我会“超出范围”。 article对象正在被@synthesized,我已经检查了它并且它有正确的数据。

有什么想法吗?这是否意味着方法是私有的还是什么?

谢谢!

3 个答案:

答案 0 :(得分:7)

这意味着调试器在尝试查询其值时无法看到它。有时这意味着变量确实超出了范围,因为它属于你不在的C块。但是有一个小故障,有时Objective-C对象,特别是NSStrings在它们非常好的时候出现在范围之外。几乎从来没有(根据我的经验)编程错误。

如果您需要查看实际值是什么,请尝试右键单击变量并选择“打印描述到控制台”。

答案 1 :(得分:1)

经过长时间解决此问题后,您应该在分配给userData事件NSString时使用对象,如下所示:

@interface callBackData
 @NSString *text;
 @NSInteger point;
@end

使用它:

callBackData *data = [[callBackData alloc] init];
data.text=[NSString stringWithString:@"something"];
something.userData = data;

你会永远都好。

请记住不要直接为userData分配NSString,因为有时候它会在没有理由的情况下超出范围

答案 2 :(得分:0)

“超出范围”是一般错误:有时它意味着变量未初始化或变量已被释放。

如果变量是在单独的线程中创建的,则不会被保留。

如何初始化文章对象以及在哪里?

在调用showArticle方法之前和/或在此行[aCategory setText:[[self article] category]];之前尝试保留article对象。