2012-03-24 5 views
0

gesetzt ist, wenn ich über Analyzer prüfe meinen Code dann bekam:Instanz Variable verwendet, während ‚Selbst‘ nicht auf das Ergebnis der ‚[(Super- oder Selbst-) init ...]‘ über Analyzer

Instanz Variable verwendet, während 'selbst' ist nicht auf das Ergebnis der [(Super- oder Selbst-) init ...]

Mein Code:

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; 
+2

Warum dies tun: 'self = (ClientInfoView *) currentObject; '? – sch

Antwort

2
  self = (ClientInfoView *)currentObject; 

das nicht Sinn machen. Sie sollten nie wieder self für das Ergebnis von [super init...] (und im Fall von einigen fortgeschrittenen Techniken, die dies nicht ist) zuweisen.

Sie sollten auch nie so durch die IB-Datei grub. Erstellen Sie eine Steckdose und stellen Sie eine Verbindung her. Verwenden Sie dann die Steckdose direkt in Ihrem Code.

Beachten Sie, dass im Allgemeinen sollten Sie nicht laden Schnittstelle in init Methoden.

0

Es ist wegen self = (ClientInfoView *)currentObject;. Ich denke, es gibt einige Verwirrung darüber, wie Sie von Ihrem nib zu Ihrem Objekt verbinden. Statt ein Objekt in der Nib-Datei instanziieren und zu versuchen, das Objekt für sie zu tauschen, versuchen zu File's Owner aus Ihrem nib verbindet, und setzen Sie sich dann als Besitzer:

NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"ClientInfoView" 
                 owner:self 
                 options:nil]; 
Verwandte Themen