UIView Категории и свойства - PullRequest
3 голосов
/ 13 декабря 2011

Я пытаюсь расширить класс UIView, чтобы включить метод setUserData, который будет содержать значения объекта или любое значение. Вот декларация:

userData определяется как свойство id в файле .h.

@implementation UIView (Extensions) 

@synthesize userData;

-(void) setUserData:(id)value
{
    self.userData = value; 
}

@end

Конечно, xCode жалуется, что я не могу использовать @synthesize в категориях. Как мне решить эту задачу или, может быть, в UIView уже есть свойство, которое может содержать объект. Как и свойство тега, но свойство тега содержит только целые числа.

1 Ответ

5 голосов
/ 13 декабря 2011

Как вы сказали, вы не можете синтезировать свойства в категории.Чтобы достичь этого, вам нужно использовать функции среды выполнения Obj-C, называемые связанными объектами.

#import <objc/runtime.h>

const char * const viewKey = "jweinberg.view.storage";

@implementation UIView (Storage)

- (id)myProperty;
{
    return objc_getAssociatedObject(self, viewKey);
}

- (void)setMyProperty:(id)property;
{
    objc_setAssociatedObject(self, viewKey, property, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...