2015-04-06 3 views
1

В настоящее время я пытаюсь использовать атрибуты пользователя Определено время выполнения в Xcode 6 по следующему алгоритму:Определенные пользователем атрибуты времени выполнения и связанных с ним объектов

  1. Добавить пользовательские свойства класса UIView с использованием связанных объектов

    #define ASSOCIATED_OBJECT_GETTER_AND_SETTER(propertyType, propertyName, propertyNameWithCapital, associationType) \ 
    -(void)set##propertyNameWithCapital:(propertyType)_value               \ 
    {                             \ 
        objc_setAssociatedObject(self, @selector(propertyName), _value, associationType);        \ 
    }                             \ 
    -(propertyType)propertyName                       \ 
    {                             \ 
        return objc_getAssociatedObject(self, @selector(propertyName));             \ 
    }                             \          
    
    @interface eMyTags : NSObject 
    @property (nonatomic) NSString* name; 
    @end 
    
    @implementation eMyTags 
    @synthesize name; 
    @end 
    
    @interface UIView (MyTags) 
    @property (nonatomic) eMyTags* myTags; 
    @property (nonatomic) NSString* myName; 
    @end 
    
    @implementation UIView (MyTags) 
    @dynamic myTags, myName; 
    ASSOCIATED_OBJECT_GETTER_AND_SETTER(eMyTags*, myTags, MyTags, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 
    ASSOCIATED_OBJECT_GETTER_AND_SETTER(NSString*, myName, MyName, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 
    @end 
    
  2. Установка значений этих свойств через Xcode раскадровку enter image description here

  3. Доступ эти свойства в коде во время выполнения

    -(void)viewDidLoad 
    { 
        [super viewDidLoad]; 
        NSLog(@"myName: %@", view.myName); 
        NSLog(@"myTags.name: %@", view.myTags.name); 
    } 
    

Когда я скомпилировать и запустить вывод:

myName: bla 
myTags.name: (null) 

Так почему myTags.name не установлен? Что я упустил? Не могу ли я установить атрибуты Runtime, определенные пользователем, для пользовательских типов?

+0

Вам удалось найти решение для этого? –

+0

@DaniA Я нашел решение для своей конкретной проблемы, но я даже не помню, что было реальной проблемой, и как я решил это :) Это было 2 года назад, и у меня нет кода на объективе-c в течение длительного времени с тех пор. Прости. – Alexandr

ответ

1

Ну myTags не выделяется в памяти и не инициализируется. С другой стороны, значение @ "bla" является строковым литералом, который на самом деле является экземпляром NSString и указывает на местоположение в памяти.

+0

О, я вижу сейчас ... Итак, когда я должен инициализировать 'myTags'? Или невозможно использовать такие пользовательские типы, как это? – Alexandr

+0

Атрибуты времени выполнения в xcode используются для установки значений для UIElements, которые в свою очередь распределяются и инициализируются при загрузке nib. http://spin.atomicobject.com/2014/05/30/xcode-runtime-attributes/ –

+1

Загрузка и инициализация пользовательских объектов невозможны с помощью этого подхода. Вам нужно написать код для этого :). –

Смежные вопросы