2014-09-17 14 views
7

Przenieśliłem mój projekt do Xcode 6 w celu zbudowania systemu na iOS 8. Jednak konkretna UILabel powoduje awarię aplikacji, gdy jest ona dostępna dodano do hierarchii widoku. Jest to jedyny dziennik błędów Otrzymuję:UILabel powoduje awarię aplikacji po dodaniu do widoku (tylko Xcode 6 i iOS 8)

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

byłem w stanie zlokalizować metodę contentInsetsFromFonts nigdzie w moim projekcie. Ponadto, nie znalazłem nawet odniesienia do niego w Internecie, łącznie z dokumentacją Apple. Nie używam stalówkę do tej UIViewController więc UI jest wbudowany w metodzie 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; 
} 

Aplikacja nie upaść na [view addSubview:label]; ulega awarii po zwróceniu metody loadView.

+0

Co zrobiłeś, żeby to naprawić? – iosMentalist

+0

Właśnie usunięto linię "label.layer.delegate = self". Właściwie nie szukałem zamiennika, ponieważ jest to dla mnie bardzo krótki element interfejsu użytkownika o niskim priorytecie. Przepraszam za to. –

+0

Domyślam się, że osadzasz SlideToCancelViewController. Znalazłem kolejną lepszą klasę. – iosMentalist

Odpowiedz

13

Od the UIView documentation:

Nigdy nie zmieniaj delegata tego obiektu warstwy.

Usuń ten wiersz:

label.layer.delegate = self; 

Cokolwiek próbujesz osiągnąć tutaj, musisz to zrobić w inny sposób.

+2

czy jest jakiś zamiennik? – iosMentalist

+0

, ale jest również napisane w odwołaniu CALayerDelegate: "Nieformalny protokół CALayerDelegate jest implementowany przez delegata warstwy, aby odpowiadać na zdarzenia związane z warstwami. Możesz wdrożyć metody tego protokołu, aby dostarczyć zawartość warstwy, obsłużyć układ podwarstw i dostarczyć Niestandardowe akcje animacji do wykonania Obiekt, który implementuje ten protokół, musi zostać przypisany do właściwości delegata obiektu warstwy. " Więc co do cholery! – Vassily

+0

więcej: https://developer.apple.com/library/ios/documentation/Cocoa/Conoa/CoreAnimation_guide/SettingUpLayerObjects/SettingUpLayerObjects.html – Vassily

Powiązane problemy