2011-12-17 12 views
6

Mam aplikację w sklepie z aplikacjami, w której używam analityki Flurry. Od czasu do czasu otrzymuję od czasu do czasu nieobsługiwany błąd wyjątku, którego nie mogę zrozumieć.Nierozpoznany selektor wysłany na UIBarButtonItem setTintColor

NSInvalidArgumentException: - [UIBarButtonItem setTintColor:]: nierozpoznany selektor wysyłane do instancji 0x177b20 błędzie: aplikacja zawieszała

Czego nie można dowiedzieć się w tym, że nie jestem ustawiania żadnych przedmiotów przycisk paska odcień koloru w dowolnym miejscu. Mam kilka niestandardowych widoków, w których ustawiam właściwy przycisk paska, ale bez odcienia.

Większość moich zastosowań przycisku wygląda następująco.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UINavigationBar *bar = [self.navigationController navigationBar]; 
    [bar setTintColor:[UIColor colorWithRed:0 green:69.0/255 blue:118.0/255 alpha:1]]; 
    self.navigationItem.title = @"Edit User"; 

    UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] 
            initWithTitle:@"Save" 
            style:UIBarButtonItemStylePlain 
            target:self 
            action:@selector(editUser:)]; 
    self.navigationItem.rightBarButtonItem = saveButton; 
    [saveButton release]; 

    UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] 
            initWithBarButtonSystemItem:UIBarButtonSystemItemCancel 
            target:self 
            action:@selector(cancel)]; 

    [[self navigationItem] setLeftBarButtonItem:cancelButton]; 
    [cancelButton release]; 

} 

Jeśli ktokolwiek ma wgląd w tę kwestię, byłbym bardzo wdzięczny. Kieruję na system iOS 4.0 i nowsze w moim projekcie.

AKTUALIZACJA: Wyjaśniałem, co było przyczyną niektórych losowych problemów na setTintColor. Zauważyłem, że ustawiam kolor tinty na jednym z aktualnych elementów przycisku paska. Zgaduję, że istnieją pewne różnice między wersjami systemu operacyjnego, które mogą powodować awarie. Więc jeśli ktoś może powiedzieć mi neutralny sposób ustawiania spersonalizowanego przycisku prawego przycisku paska na moim pasku nawigacyjnym, będzie to docenione.

+1

Ostatnio miałem pewne problemy. Czasami trzeba po prostu wywołać setTintColor na podstronach NavigationController. ([[self.navigationController.navigationBar subviews] objectAtIndex: 1] setTintColor: [UIColor redColor]];) Przynajmniej to naprawiło to dla mnie. – CodaFi

Odpowiedz

7

Problem polegał na użyciu błędnego -setTintColor na 2 klasach. -setTintColor nie jest obsługiwany na urządzeniach 4.x, więc nastąpi awaria, gdy starsze urządzenia natrafią na kolor tinty.

+0

Odkryłem również, że 'TintColor' nie jest obsługiwany na IOS 5.0 i poniżej dla' MPVolumeView'. – ForceMagic

3

Czy próbowałeś:

self.navigationController.navigationBar.tintColor =[UIColor colorWithRed:0 green:69.0/255 blue:118.0/255 alpha:1]; 

?

+0

Brzmi bardziej jak komentarz niż odpowiedź. – Till

+0

Nie. Nie mogę powielić problemu w symulatorze lub na moim urządzeniu. Wypróbuję to i dam ci znać. –

1

jeśli cel jest iOS 4.0 można to zrobić: W swojej AppDelegate.m w końcu po @end umieścić ten kod:

@implementation UINavigationBar (UINavigationBarCategory) 
- (void)drawRect:(CGRect)rect { 
    UIColor *color = [UIColor YOUR_COLOR]; 
    self.tintColor = color; 
     //if you want image for background use this code 
    UIImage *img = [UIImage imageNamed: @"IMAGE_NAME.png"]; 
    [img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
} 

@end 

nadzieję, że to pomaga. Dla mnie to praca.

Powiązane problemy