Заголовок расширения класса 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)
) работают, но должны быть реализованы с большой осторожностью, так как вы не должны изменять унаследованное поведение, просто добавьте к нему.