当我通过Analyzer测试代码时,得到:
当"self"未设置为[(super或self)init…]的结果时使用的实例变量
我的代码:
self = [super init];//initWithFrame:frame];
if (self)
{
tickerSymbol = [object valueForKey:@"TickerSymbol"];
url = [object valueForKey:@"URL"];
rssFeed = [object valueForKey:@"RSSFeed"];
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"ClientInfoView"
owner:nil
options:nil];
for (id currentObject in topLevelObjects)
{
if ([currentObject isKindOfClass:[ClientInfoView class]])
{
self = (ClientInfoView *)currentObject;
break;
}
}
[self.clientNameLabel setText:[clientObject valueForKey:@"Name"]];
[self.symbolLabel setText:[object valueForKey:@"TickerSymbol"]];
//[self loadHistoricalInfo];
self.getStock = [GetStockValue stockValueWithDelegate:self];
[self loadInfo:object clientObject:clientObject];
[self layoutLabels];
}
return self;
self = (ClientInfoView *)currentObject;
这没有任何意义。您永远不应该将self
保存重新分配给[super init...]
的结果(在某些高级技术的情况下,这不是)。
您也不应该像那样费力地浏览IB文件。创建一个出口并建立连接,然后直接在代码中使用该出口。
注意,一般情况下,不应该在init
方法中加载接口。
这是因为self = (ClientInfoView *)currentObject;
。我认为在如何从nib
中连接到对象方面存在一些困惑。不要在nib文件中实例化一个对象并尝试用它交换对象,而是尝试从nib
中连接到File's Owner
,然后将自己设置为所有者:
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"ClientInfoView"
owner:self
options:nil];