Заголовок расширения класса Objective c - Новое в xcode

Я пытался использовать шаблон заголовка расширения класса c (только.h), который появился в Xcode. Я не знаю как. Ну, я сделал File - > New File - > target c заголовком расширения класса и дал ему имя "UICodeButton", и он наследуется от UIButton. Теперь в этом.h файле я написал @property (read write) NSInteger * cID; и чуть ниже этой реализации. Так вот так:

#import <UIKit/UIKit.h>

@interface UIButton ()
@property (readwrite) NSInteger * codeID;
@property (readwrite) NSInteger * pID;
@property (readwrite) NSString * cDesc;
@property (readwrite) NSString *pDesc;
@end

@implementation UIButton

@synthesize codeID;
@synthesize pID;
@synthesize cDesc;
@synthesize pDesc;
@end

я использую это в классе viewcontroller.. так что у меня есть (ViewCP.h и ViewCP.m) файлы. В.m файле я импортирую #import "UIButton_UICodeButton.h" . Здесь, в этом файле, я пишу в представлении, загрузил следующее

- (void)viewDidLoad
{
NSInteger tt = (NSInteger) S_B_T;
NSLog(@" the value is %d",tt);
 self.btnJobType.pID = &(tt);
}

Выход: значение 555

у меня S_B_T установлен как 555 в определении. Когда он попадает в self.btnJobType.pID= &(tt); Он выдает ошибку * Завершение приложения из-за необработанного исключения "NSInvalidArgumentException", причина: "-[UIRoundedRectButton setPID:]: нераспознанный селектор, отправленный экземпляру. Так что я не пишу что-то правильное с этим. Где я должен написать метод набора для PID? Я думал, что синтез PID добьется цели. Но, видимо, нет. Так как мне продолжить? я искал примеры для "расширения класса объектива" . Но не мог найти ни одного. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать. Спасибо

2 ответа

Решение

Вам запрещено создавать продолжения класса (например, @interface SOMEClass ()) на классы, которые вы не реализуете. Следовательно, вы не можете добавлять поля / свойства к классам каркаса. Конечно, вы можете использовать категории для добавления либо методов класса, либо методов экземпляра.

Вместо этого вы должны создать подкласс и добавить туда свои свойства / ivars.

Вы также можете написать категорию для существующего класса в другом случае использования. Для некоторых классов создание подклассов запрещено. Категории (как @interface SOMEClass (MyCategory)) работают, но должны быть реализованы с большой осторожностью, так как вы не должны изменять унаследованное поведение, просто добавьте к нему.

Другие вопросы по тегам