Objective-Kategoria C

Mój projekt ma UIImage funkcję kategorii, którą chcę wywołać z innej klasy. Poprawnie importuję plik nagłówkowy dla kategorii obrazu i dostaję projekt do kompilacji bez ostrzeżenia.

Problem polega na tym, że gdy wywołuję funkcję kategorii UIImage, zauważyłem nierozpoznany błąd selektora z NSInvalidArgumentException. Dlaczego to widzę, skoro wszystko dobrze powiązałem?

#import <UIKit/UIKit.h>

@interface UIImage (DRShare)

+ (UIImage*) imageNamed:(NSString*)name;

@end


@implementation UIImage (DRShare)

+ (UIImage*) imageNamedDR:(NSString*)name{

    CGFloat s = 1.0f;
    if([[UIScreen mainScreen] respondsToSelector:@selector(scale)]){
        s = [[UIScreen mainScreen] scale];
    }

    NSString *path = [NSString stringWithFormat:@"%@%@%@.png",kImagesPath,name,s > 1 ? @"@2x":@""];
    return [UIImage imageWithContentsOfFile:DRBUNDLE(path)];
}

@end

Plik wywołujący:

        backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamedDR:@"Share Popup Background"]];

Wyjątek podniesiony:

2010-10-22 11:51:02.880 Stuff[11432:207] +[UIImage imageNamedDR:]: unrecognized selector sent to class 0x1f8e938
2010-10-22 11:51:02.883 Stuff[11432:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[UIImage imageNamedDR:]: unrecognized selector sent to class 0x1f8e938'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x02e65b99 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x02fb540e objc_exception_throw + 47
    2   CoreFoundation                      0x02e6776b +[NSObject(NSObject) doesNotRecognizeSelector:] + 187
    3   CoreFoundation                      0x02dd72b6 ___forwarding___ + 966
    4   CoreFoundation                      0x02dd6e72 _CF_forwarding_prep_0 + 50
    5   TapTapShare                         0x0001291c -[DRShareViewController backgroundView] + 127
    6   TapTapShare                         0x00012343 -[DRShareViewController loadView] + 639
    7   UIKit                               0x0044f54f -[UIViewController view] + 56
    8   UIKit                               0x0044d9f4 -[UIViewController contentScrollView] + 42
    9   UIKit                               0x0045d7e2 -[UINavigationController _computeAndApplyScrollContentInsetDeltaForViewController:] + 48
    10  UIKit                               0x0045bea3 -[UINavigationController _layoutViewController:] + 43
    11  UIKit                               0x0045d12d -[UINavigationController _startTransition:fromViewController:toViewController:] + 524
    12  UIKit                               0x00457ccd -[UINavigationController _startDeferredTransitionIfNeeded] + 266
    13  UIKit                               0x00574b55 -[UILayoutContainerView layoutSubviews] + 226
    14  QuartzCore                          0x02616481 -[CALayer layoutSublayers] + 177
    15  QuartzCore                          0x026161b1 CALayerLayoutIfNeeded + 220
    16  QuartzCore                          0x026160bd -[CALayer layoutIfNeeded] + 111
Author: Meet Doshi, 2010-10-22

7 answers

Kilka możliwości:

  1. nie połączyłeś UIImage+TTShare.m ze swoim celem. Więc jeśli masz nagłówek, nie kompilujesz implementacji.
  2. jeśli jest to część biblioteki statycznej, musisz dodać -all_load do Inne flagi linkera ustawienie budowania aplikacji łączącej się z biblioteką.
 205
Author: Dave DeLong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-17 23:44:32

Jeśli chcesz użyć metody Category, musisz dodać -ObjC do innych ustawień budowania flagi linkera Twojej aplikacji.

 7
Author: ling,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-28 13:58:40

Miałem ten sam problem i musiałem zastosować tę poprawkę. Moje Nsdate-Extensions.plik źródłowy m nie był kompilowany, więc musiałem przejść do ustawień projektu, następnie wybrać odpowiedni cel, a następnie kliknąć zakładkę" Build Phases", a następnie rozwinąć elementy" Compile Sources", a następnie kliknąć symbol + i ręcznie dodać moje nsdate-Extensions.plik M.

 6
Author: Clive Paterson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-11 05:39:06

Miałem ten Komunikat o błędzie i używam Cocoapods. Aby naprawić błąd, musiałem ponownie wywołać pod install, aby poprawnie utworzyć wszystkie niezbędne łącza.

 0
Author: High6,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-09 10:48:20

Inna możliwość.

Masz implementację kategorii, ale nie masz interfejsu. Zapomniałeś zadeklarować w *.h interfejs Twojej kategorii.

 0
Author: Voda Ion,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-27 09:00:32

Jeszcze jedna możliwość:

To jest prawie zbyt żenujące, aby przyznać, ale na wypadek, gdyby ktoś mógł zrobić ten sam głupi błąd: {]}

Kopiowałem kod z jednego projektu do drugiego i przez pomyłkę wkleiłem ten sam kod źródłowy do pliku .h I pliku .m (w obu umieściłem kod przeznaczony dla pliku .h). Naprawiłem mój plik .m i zadziałało.

 0
Author: Nikolay Suvandzhiev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-02 15:40:46

Może być dlatego, że piszesz imageNamed zamiast imageNamedDR w interfejsie..

 0
Author: Hlung,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-15 11:43:10