Hier einige Code:
Dateiname: NSObject + dictionary.h
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
@interface NSObject (dictionary)
- (NSMutableDictionary*) getDictionary;
@end
Dateiname: 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");
}
Jetzt jede Instanz (von jeder Klasse) hat ein Wörterbuch, wo Sie Ihre speichern können benutzerdefinierte Attribute Mit Key-Value Coding können Sie einen Wert wie folgt festgelegt:
[myObject setValue:attributeValue forKeyPath:@"dictionary.attributeName"]
Und Sie können den Wert wie folgt erhalten:
[myObject valueForKeyPath:@"dictionary.attributeName"]
Dass selbst funktioniert gut mit dem Interface Builder und User Defined Runtime Attribute.
Key Path Type Value
dictionary.attributeName String(or other Type) attributeValue
Diese Antwort ist unvollständig. Diese Lösung erlaubt es nicht, auf die Eigenschaft/den Ivar von innerhalb der Kategorie aus zuzugreifen, beispielsweise von einer Klassenmethode. – SpaceDog