'self'时使用的实例变量未设置为通过分析器'[(super or self) init…]'的结果



当我通过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];

相关内容

  • 没有找到相关文章

最新更新