Объективная категория, вызывающая непризнанный селектор -- iphone поле с участием objective-c поле с участием cocoa поле с участием categories пол Связанный проблема

Objective-C Category Causing unrecognized selector


69
vote

проблема

русский

Мой проект имеет <код> UIImage Функция категории, которую я хочу позвонить из другого класса. Я правильно импортирую файл заголовка для категории изображений, и я получаю проект для компиляции без предупреждения.

Проблема в том, что, когда я вызываю <код> UIImage функции категории, я видел нераспознанный селекторную ошибку с <код> NSInvalidArgumentException . Почему я вижу это, если я правильно связал все?

 <код> #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   

Файл, который называет его:

 <код>         backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamedDR:@"Share Popup Background"]];   

С исключением исключения:

 <код> 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   
Английский оригинал

My project has a UIImage category function that I want to call from another class. I properly import the header file for the image category and I get the project to compile with no warning.

The problem is that when I call the UIImage category function I seen an unrecognized selector error with a NSInvalidArgumentException. Why am I seeing this if I've properly linked everything?

#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 

file that calls it:

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

exception raised:

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 
</div
           
         
         

Список ответов

219
 
vote
vote
Лучший ответ
 

Пара возможностей:

  1. Вы не ссылались <код> UIImage+TTShare.m в вашу цель. Поэтому, пока у вас есть заголовок, вы не составиете реализацию.
  2. Если это является частью статической библиотеки, вам нужно добавить <код> -all_load на флаги других линкеров настройки сборки для приложения, связывающегося против библиотеки.
 

A couple possibilities:

  1. You did not link UIImage+TTShare.m into your target. So while you have the header, you're not compiling the implementation.
  2. If this is part of a static library, you need to add -all_load to the Other Linker Flags build setting for the app linking against the library.
</div
 
 
         
         
10
 
vote

Если вы хотите использовать метод категории, вы должны добавить -objc на другие флажки ссылки на создание вашего приложения.

 

If you want to use Category method, you must add -ObjC to the Other Linker Flags build setting of your APP.

</div
 
 
 
 
6
 
vote

У меня была такая же проблема и пришлось также применить это исправление. Мои исходные файлы nsdate-extensions.m не было компилирующим, поэтому мне пришлось перейти в настройки проекта, затем выберите соответствующую цель, затем выберите вкладку «Создание фаз», затем разверните элементы «Компилировать источники», затем нажмите символ + и вручную добавьте мои NSDate-Extensions.m файл.

 

I had the same issue and had to apply this fix as well. My NSDate-Extensions.m source file wasn't compiling so I had to go into Project Settings, then select the appropriate target, then click the "Build Phases" tab, then expand the "Compile Sources" items, then click the + symbol and manually add my NSDate-Extensions.m file.

</div
 
 
0
 
vote

У меня было это сообщение об ошибке, и я использую Cocoapods. Чтобы исправить ошибку, мне просто нужно было звонить <код> pod install еще раз, чтобы создать все необходимое соединение правильно.

 

I had this error message and I am using Cocoapods. To fix the error, I just needed to call pod install again to create all the necessary linking correctly.

</div
 
 
0
 
vote

Другая возможность.

У вас есть реализация категории, но не иметь интерфейса. Я имею в виду, что вы забыли объявить в * .h Интерфейс вашей категории.

 

Another possibility.

You have the implementation of category but do not have an interface. I mean you forgot to declare in *.h the interface of your category.

</div
 
 
0
 
vote

Еще одна возможность:

Это почти слишком смущает, чтобы признать, но на случай, если кто-то мог бы сделать то же самое глупую ошибку:

Я копировал код из одного проекта в другое, и по ошибке я вставил один и тот же исходный код в <код> .h файла и <код> .m файла (в обоих у меня был Поместите код, предназначенный для <код> .h файла). Я зафиксировал свой <код> .m файл, и он работал.

 

Yet another possibility:

This is almost too embarrassing to admit, but just in case someone might have done the same silly mistake:

I was copying code from one project to another, and by mistake I had pasted the same source code in the .h file and the .m file (in both I had put the code meant for the .h file). I fixed my .m file and it worked.

</div
 
 
0
 
vote

Может быть, потому что вы пишете <код> imageNamed вместо <код> imageNamedDR в интерфейсе ..

 

May be because you write imageNamed instead of imageNamedDR in the interface..

</div
 
 

Связанный проблема

0  Получение неправильной аннотации от метода делегата MapView  ( Getting wrong annotation from mapview delegate method ) 
Я объявил следующее в своем файле .h: <Код> Annotation *annoForMoreDetails . Однако, когда я пытаюсь установить его в текущую аннотацию в методе <Код> -...

47  Получение ошибки от push-уведомления  ( Getting an error from push notification ) 
В моем приложении мне нужны push-уведомления. Я реализую все инструкции от Docs push-уведомления. Но я получил ошибку от push-уведомления: <код> Fail To Reg...

0  вебсервис В Iphone SDK?  ( Webservice in iphone sdk ) 
<Р> я скачал WSDLObjC-0,6 от Google, чтобы включить SOAP веб-сервис в IPhone SDK.But это является, как App файл, как я могу интегрировать этот файл в iPhone SD...

7  Никогда не получайте загрузку данных в Google API для iOS  ( Never getting uploading data progress in google api for ios ) 
Я использую Googledrive API в своем приложении, чтобы загрузить файлы из моего приложения. До сих пор мне удалось найти хорошие результаты для загрузки всех т...

2  IOS: Как нарисовать линию между двумя движущимися объектами?  ( Ios how to draw a line between two moving objects ) 
Я в основном имеющую массив объектов UIView, которые находятся на экране. Они перемещаются случайным образом вокруг, и я хотел бы иметь строку, соединяющую ка...

0  Могу ли я использовать зону памяти, чтобы убить утечки iPhone?  ( Can i use a memory zone to kill iphone leaks ) 
У меня есть класс C ++, который я использую с моим контроллером Objective-C ++ в моем приложении iPhone. Класс C ++ делает некоторые расчеты на некоторых данн...

3  Facebook IOS SDK: войдите в Facebook без всегда просить разрешений для приложения  ( Facebook ios sdk login to facebook without always ask for permissions for the a ) 
Я использую Facebook iOS SDK в моем приложении, и у меня есть два подобных вопроса: Есть ли способ узнать, есть ли в настоящее время войти пользователя? ...

4  Основные данные Nsfetchrequest также выбирают детей объектов объекта  ( Core data nsfetchrequest also fetches children objects of the entity ) 
Я новичок в iOS Dev и основные данные. У меня есть родительский NsmanageObject <код> @class Units; @interface Properties : NSManagedObject @property (nonat...

17  iPhone: камера Autofocus Observer?  ( Iphone camera autofocus observer ) 
Я хотел бы знать, можно ли получать уведомление о Autofocus внутри приложения для iPhone? I.e, существует ли у него способ быть уведомленным, когда автофоку...

8  Как обрезать изображение в частях программно  ( How to crop image in to pieces programmatically ) 
Мне нужно разделить изображение на 9 штук программно. Любые предложения о том, как это сделать? ...

15  Как получить все записи NSFetchedResultScontroller / NsmanageObjectContext?  ( How to get all entries of a nsfetchedresultscontroller nsmanagedobjectcontext ) 
У меня есть хорошее рабочее приложение для iPhone, которое работает с основными данными. Я использую NSFetchedResultScontroller / NSManageObjectContext, как о...

2  IPhone UiableView подавляет кнопку раскрытия, когда кнопка «Удаление» отображается  ( Iphone uitableview suppress disclosure button when delete button is displayed ) 
У меня есть <код> UITableView , который имеет кнопку раскрытия на каждой строке. Когда таблица введена в режим редактирования, и управление удалением нажата (...

1  Нужно, чтобы получить доступ к URL в моем одном представлении ИОС приложения с помощью веб-просмотра  ( Need to access the url in my single view ios application using web view ) 
<Р> У меня есть один вопрос относительно WebView. У меня есть URL-адрес, и нужно, чтобы запустить этот URL в WebView. и мой код здесь идет .. <код> NSLog(@"R...

1  Обновите и вставьте объемные данные XML в мою базу данных SQLite  ( Update and insert bulk xml data into my sqlite database ) 
Я хочу загрузить хостованный XML документ в базу данных My приложения SQLite, обновляя существующие строки или вставляя новые строки данных по мере необходимо...

1  Как изменить XIB в приложении вкладывателя?  ( How to change xib in a tab bar application ) 
Мое приложение для iPhone основано на панели вкладка, но я хотел бы выстрелить действие, которое полностью выключает View Controller Tab Bar полностью и замен...

Связанный проблема

0  Получение неправильной аннотации от метода делегата MapView 
47  Получение ошибки от push-уведомления 
0  вебсервис В Iphone SDK? 
7  Никогда не получайте загрузку данных в Google API для iOS 
2  IOS: Как нарисовать линию между двумя движущимися объектами? 
0  Могу ли я использовать зону памяти, чтобы убить утечки iPhone? 
3  Facebook IOS SDK: войдите в Facebook без всегда просить разрешений для приложения 
4  Основные данные Nsfetchrequest также выбирают детей объектов объекта 
17  iPhone: камера Autofocus Observer? 
8  Как обрезать изображение в частях программно 
15  Как получить все записи NSFetchedResultScontroller / NsmanageObjectContext? 
2  IPhone UiableView подавляет кнопку раскрытия, когда кнопка «Удаление» отображается 
1  Нужно, чтобы получить доступ к URL в моем одном представлении ИОС приложения с помощью веб-просмотра 
1  Обновите и вставьте объемные данные XML в мою базу данных SQLite 
1  Как изменить XIB в приложении вкладывателя? 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.