Update:Чтения союзных свойств с помощью KVC в Objective-C
Я вареные вопросы вниз, чтобы просто не в состоянии использовать ключевое кодирование значения на классе я сделал видел ниже
#import <Foundation/Foundation.h>
#import <GLKit/GLKit.h>
@interface CMTransformation : NSObject
@property(nonatomic) GLKVector3 position;
@property(nonatomic) GLKVector3 scale;
@property(nonatomic) GLKVector3 rotation;
@property(nonatomic) GLKVector3 anchor;
@property(nonatomic) GLKMatrix4 matrix;
- (GLKMatrix4)calculateMatrixWithParentTransformation:(CMTransformation *)parentTransformation;
@end
Я понял и понял, что я должен ухватить не NSObjects как NSValues, однако я не могу получить доступ к этим элементам (которые определены как объединения) с использованием синтаксиса KVC:
CMTransformation* trans = [[CMTransformation alloc] init];
temp = [trans valueForKey:@"position"];
Точно так же, если я пытаюсь получить доступ к основной переменной:
CMTransformation* trans = [[CMTransformation alloc] init];
temp = [trans valueForKey:@"_position"];
Оба эти сгенерирует исключение, потому что ключ не найден. Что мне здесь не хватает?
Предыдущий вопрос
Я написал код, который позволяет мне получить доступ к (несколько) произвольную структуру со строкой, такой как «transformation.position»
По какой-то причине код перестает работать на второй прыжок, когда я пытаюсь прочитать свойство из NSObject. Вот
NSString* property = actionDetails[@"Property"];
PropertyParts = [[property componentsSeparatedByString:@"."] mutableCopy];
int count = [PropertyParts count];
id current_object = initial_object;
for(int i = 0; i < count; i++)
{
NSString* current_part = PropertyParts[i];
current_object = [current_object valueForKey:current_part];
}
Я пробовал весь возможный синтаксис для доступа к свойствам, включая Свойство, свойство и _property.
Вот обычай NSObject декларация
#import <Foundation/Foundation.h>
#import <GLKit/GLKit.h>
@interface CMTransformation : NSObject
@property(nonatomic) GLKVector3 position;
@property(nonatomic) GLKVector3 scale;
@property(nonatomic) GLKVector3 rotation;
@property(nonatomic) GLKVector3 anchor;
@property(nonatomic) GLKMatrix4 matrix;
- (GLKMatrix4)calculateMatrixWithParentTransformation:(CMTransformation *)parentTransformation;
@end
Кроме того, я могу видеть, после первого цикла, что отладчик говорит, что CMTransformation * заполняемые currrent_object, так что я в недоумении, почему я не могу получить доступ к своим свойствам?
ли 'current_object' в CMTransformation? Почему вы делаете его типом 'id' вместо того, чтобы быть явным? – timgcarlson
Это предназначено, чтобы иметь возможность выполнять итерацию любой вложенной структуры NSObject, а не только конкретный пример. В ARC вы можете использовать кодирование KV даже для переменных класса. – David
вы можете попробовать реализовать _-valueForUndefinedKey: _ для исправления этого случая. (Или, может быть, _ + resolInstanceMethod: _) – nielsbot