2014-09-17 11 views
7

Ho eseguito la transizione del mio progetto su Xcode 6 per poterlo costruire per iOS 8. Tuttavia, un particolare UILabel causa l'arresto anomalo dell'app quando è aggiunto alla gerarchia della vista. Questo è l'unico log degli errori che ricevo:UILabel causa l'arresto anomalo dell'app quando aggiunto alla vista (solo Xcode 6 e iOS 8)

-[MyViewController _contentInsetsFromFonts]: unrecognized selector sent to instance  0x16d90da0 

Sono stato in grado di individuare il metodo contentInsetsFromFonts ovunque nel mio progetto. Inoltre, non sono stato nemmeno in grado di trovare un riferimento ovunque online, compresa la documentazione di Apple. Non sto usando un pennino per questo UIViewController modo l'interfaccia utente è costruita nel metodo loadView:

- (void)loadView { 
    UIImage *trackImage = [UIImage imageNamed:@"sliderTrack.png"]; 
    sliderBackground = [[UIImageView alloc] initWithImage:trackImage]; 
    UIView *view = [[UIView alloc] initWithFrame:sliderBackground.frame]; 
    [view addSubview:sliderBackground]; 

    slider = [[UISlider alloc] initWithFrame:sliderBackground.frame]; 
    CGRect sliderFrame = slider.frame; 
    sliderFrame.size.width -= 46; 
    slider.frame = sliderFrame; 
    slider.center = sliderBackground.center; 
    slider.backgroundColor = [UIColor clearColor]; 
    [slider setMinimumTrackImage:[UIImage imageNamed:@"sliderMaxMinTrackImage.png"] forState:UIControlStateNormal]; 
    [slider setMaximumTrackImage:[UIImage imageNamed:@"sliderMaxMinTrackImage.png"] forState:UIControlStateNormal]; 
    UIImage *thumbImage = [UIImage imageNamed:@"cancel-slider.png"]; 
    [slider setThumbImage:thumbImage forState:UIControlStateNormal]; 
    slider.minimumValue = 0.0; 
    slider.maximumValue = 1.0; 
    slider.continuous = YES; 
    slider.value = 0.0; 

    // Set the slider action methods 
    [slider addTarget:self 
      action:@selector(sliderUp:) 
    forControlEvents:UIControlEventTouchUpInside]; 
    [slider addTarget:self 
      action:@selector(sliderDown:) 
    forControlEvents:UIControlEventTouchDown]; 
    [slider addTarget:self 
      action:@selector(sliderChanged:) 
    forControlEvents:UIControlEventValueChanged];  

    NSString *labelText = @"label text"; 
    UIFont *labelFont; 
    NSString *osVersion = [[UIDevice currentDevice] systemVersion]; 
    if ([osVersion floatValue] >= 7.0) { 
     labelFont = [UIFont systemFontOfSize:22.0]; 

    } else { 
     labelFont = [UIFont systemFontOfSize:24.0]; 
    } 

    CGSize labelSize = [labelText sizeWithAttributes:[NSDictionary dictionaryWithObjectsAndKeys:labelFont, NSFontAttributeName, nil]]; 

    label = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, labelSize.width, labelSize.height)]; 

    CGFloat labelHorizontalCenter = slider.center.x + (thumbImage.size.width/2); 
    label.center = CGPointMake(labelHorizontalCenter, slider.center.y); 

    // Set other label attributes and add it to the view 
    label.textColor = [UIColor whiteColor]; 
    label.textAlignment = NSTextAlignmentCenter; 
    label.backgroundColor = [UIColor clearColor]; 
    label.font = labelFont; 
    label.text = labelText; 

    [view addSubview:label]; 

    [view addSubview:slider]; 

    label.layer.delegate = self; 

    self.view = view; 
} 

L'applicazione non va in crash a [view addSubview:label]; si arresta dopo il ritorno del metodo loadView.

+0

Che cosa hai fatto per risolverlo? – iosMentalist

+0

Appena cancellato la riga "label.layer.delegate = self". In realtà non ho cercato un rimpiazzo perché è un elemento dell'interfaccia utente piuttosto a bassa priorità per me al momento. Mi dispiace per quello –

+0

Immagino che tu stia incorporando SlideToCancelViewController. Ho trovato un'altra classe migliore. – iosMentalist

risposta

13

Da the UIView documentation:

Non modificare il delegato di questo oggetto layer.

Eliminare questa riga:

label.layer.delegate = self; 

Qualunque cosa si sta cercando di realizzare qui, avrete bisogno di fare in un altro modo.

+2

c'è qualche sostituzione? – iosMentalist

+0

ma è anche scritto nel riferimento CALayerDelegate: "Il protocollo informale CALayerDelegate è implementato dal delegato del livello per rispondere agli eventi relativi al livello.È possibile implementare i metodi di questo protocollo per fornire il contenuto del livello, gestire il layout dei sottolivelli e fornire azioni di animazione personalizzate da eseguire. L'oggetto che implementa questo protocollo deve essere assegnato alla proprietà delegato dell'oggetto layer. " Quindi che diavolo! – Vassily

+0

più oltre: https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreAnimation_guide/SettingUpLayerObjects/SettingUpLayerObjects.html – Vassily

Problemi correlati