Вот код:
Имя файла: NSObject + dictionary.h
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
@interface NSObject (dictionary)
- (NSMutableDictionary*) getDictionary;
@end
Имя файла: NSObject + dictionary.m
#import "NSObject+dictionary.h"
@implementation NSObject (dictionary)
- (NSMutableDictionary*) getDictionary
{
if (objc_getAssociatedObject(self, @"dictionary")==nil)
{
objc_setAssociatedObject(self,@"dictionary",[[NSMutableDictionary alloc] init],OBJC_ASSOCIATION_RETAIN);
}
return (NSMutableDictionary *)objc_getAssociatedObject(self, @"dictionary");
}
Теперь у каждого экземпляра (каждого класса) есть словарь, в котором вы можете хранить свои пользовательские атрибуты.
С помощью Key-Value Coding вы можете установить значение следующим образом:
[myObject setValue:attributeValue forKeyPath:@"dictionary.attributeName"]
И вы можете получить значение следующим образом:
[myObject valueForKeyPath:@"dictionary.attributeName"]
Это даже прекрасно работает с Интерфейсным Разработчиком и Определяемыми пользователем Атрибутами времени выполнения.
Key Path Type Value
dictionary.attributeName String(or other Type) attributeValue