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
.
Co zrobiłeś, żeby to naprawić? – iosMentalist
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. –
Domyślam się, że osadzasz SlideToCancelViewController. Znalazłem kolejną lepszą klasę. – iosMentalist