0

Analyzer でコードをテストすると、次のようになりました。

「self」が [(super or 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;
4

2 に答える 2

2
            self = (ClientInfoView *)currentObject;

それは意味がありません。selfの結果に save for を再割り当てすることは絶対にしないでください[super init...](高度な手法の場合はそうではありません)。

また、そのような IB ファイルをグラブする必要もありません。アウトレットを作成して接続し、そのアウトレットをコードで直接使用します。

一般に、メソッドでインターフェイスをロードしないでくださいinit

于 2012-03-24T19:00:57.567 に答える
0

のせいですself = (ClientInfoView *)currentObject;。内からオブジェクトに接続する方法について、混乱があると思いますnib。nib ファイル内でオブジェクトをインスタンス化してオブジェクトを交換しようとする代わりに、File's Owner内から に接続してからnib、自分を所有者として設定します。

NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"ClientInfoView" 
                                                         owner:self 
                                                       options:nil];
于 2012-03-24T19:10:56.230 に答える