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
7 answers
Kilka możliwości:
- nie połączyłeś
UIImage+TTShare.m
ze swoim celem. Więc jeśli masz nagłówek, nie kompilujesz implementacji. - jeśli jest to część biblioteki statycznej, musisz dodać
-all_load
do Inne flagi linkera ustawienie budowania aplikacji łączącej się z biblioteką.
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.
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.
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.
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.
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.
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..
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