Добавление категории в UIImage в iPhone - PullRequest
3 голосов
/ 09 апреля 2011

Я хочу добавить категорию в UIImage и связать ее с моим приложением для iPhone, но я получил эту ошибку:

(нераспознанный селектор)

Мой код: DoingStuff.h

#import <UIKit/UIKit.h>

@interface UIImage (DoingStuff)

- (UIImage *)performStuff;

@end

DoingStuff.m

#import "DoingStuff.h"

@implementation UIImage (DoingStuff)

- (UIImage *)performStuff 
{
    // My code here
}

@end

Но когда я запускаю свою программу, я получаю это:

Завершение работы приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: '- [UIImageView executeStuff:]: нераспознанный селектор, отправленный экземпляру 0x4b415d0'

Ответы [ 3 ]

3 голосов
/ 09 апреля 2011
[UIImage performStuff]; // Correct call

не

[UIImageView performStuff]; // It is a UIImage category not UIImageView

для начинающих.

Итак, вы бы сделали что-то вроде этого ...

UIImage* image = [UIImage imageNamed:@"test"];
[image performStuff];
0 голосов
/ 09 апреля 2011

В зависимости от того, как настроена ваша категория, вам нужно будет назвать ее так:

UIImage* myImage = [UIImage imageNamed:@"testImage"];
[myImage performStuff];

Кроме того, вы не соблюдаете соглашения об именах для категорий. Ваше имя класса должно быть чем-то вроде «UIImage + DoingStuff.h». Я бы предложил рефакторинг, чтобы другим было понятно, что это категория.

И, конечно, вам нужно импортировать файл заголовка в класс, в котором вы хотите его использовать:

#import "DoingStuff.h"
0 голосов
/ 09 апреля 2011

Если категория находится в целевом проекте, просто включите DoingStuff.h.Если внутри статической библиотеки компоновщик не будет связывать ее, потому что он не знает, что должен связать объекты цели c, о которых он не знает, будет использоваться.

Вам необходимо поместить один из -all_load, -force_load или -ObjC в других опциях компоновщика в целевом проекте.Разные люди сообщают, что некоторые или все из них заставляют работать компоновщик.Начиная с XCode 4 -ObjC должно быть достаточно.

Это говорит о том, что у меня не получилось ни с одним из них, и заканчивалось добавлением категорий из библиотеки в целевой проект в качестве ссылок.

РЕДАКТИРОВАТЬ

Только что увидел мою ошибку, возможно, она связана, но это метод экземпляра, и вы вызываете его как метод класса:

not

[UIImage performStuff];

но

UIImage *image = <your image>;
[image performStuff];
...