点击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
显示正常,但category
和authors
未显示。当我调试时,当我查看类别/作者的值时,我会“超出范围”。 article
对象正在被@synthesized,我已经检查了它并且它有正确的数据。
有什么想法吗?这是否意味着方法是私有的还是什么?
谢谢!
答案 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对象。