【发布时间】:2011-02-06 07:50:27
【问题描述】:
我无法让变量赋值在以下初始化程序中工作:
- (id)initWithBaseURL:(NSString *)url {
self = [super initWithNibName:@"MyNibName" bundle:nil];
if (self) {
baseURL = [url copy];
}
return self;
}
我已经验证了 url 参数对于适当的内容是有效的(创建为通过 NSXMLParser 构建的 NSMutableString,然后在调试器的 initWithBaseURL 方法中检查),但是在将复制操作的结果分配给 baseURL 之后,baseURL变量“超出范围”并且仍然无效。任何尝试在类的其他方法中访问 baseURL 变量都会导致 EXC_BAD_ACCESS 错误。
我在 .h 文件中声明了 baseURL,如下所示,没有 @property 或 @synthesize 操作,因为我试图将它用作私有成员变量:
@interface SignInViewController : UIViewController {
// other variables
@private
NSString *baseURL;
}
// Other @property delcarations, IBAction method declartions, and method declarations
@end
我也尝试使用here 描述的技术,但这只会导致初始化程序中出现 EXC_BAD_ACCESS 错误。
我在做什么会导致 EXC_BAD_ACCESS 错误发生,我该如何解决?
【问题讨论】:
-
“超出范围”的事情是红鲱鱼。见这里:stackoverflow.com/questions/1566086/…
-
调试您的问题(这超出了您发布的内容):如果错误发生在初始化程序中,则参数
url可能无效。尝试CFShow(url)并查看是否在此处捕获或遇到错误。如果不是,则检查 CFShow 的输出以确保没有忽略某些内容(无效的参数类型?)。如果控制台中一切正常,请尝试在启用 NSZombies 的情况下运行。祝你好运 -
@Justin 我尝试按照您的建议调用 CFShow(url) ,但得到相同的 EXC_BAD_ACCESS 错误。启用 NSZombies 表明我正在处理一个已释放的实例,这很奇怪,因为直到 initWithBaseURL: 方法之后才调用 release。
-
啊哈!维护对 url 值的引用的实例设置不正确(在外部类的初始值设定项中设置值时,我忘记包含自引用)。 NSZombies 和 CFShow 来救援!
标签: iphone objective-c variables