2015-04-06 86 views
1

我目前正在嘗試使用用戶定義的屬性運行在Xcode 6以下算法:用戶自定義運行時的屬性和相關對象

  1. 使用相關聯的對象

    #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. 添加到UIView類自定義屬性
  3. 通過Xcode的這些屬性的設置值故事板 enter image description here

  4. 次訪問這些屬性在代碼運行時

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

當我編譯和運行時的輸出是:

myName: bla 
myTags.name: (null) 

那麼,爲什麼myTags.name沒有設置?我錯過了什麼?我無法設置自定義類型的用戶定義的運行時屬性?

+0

您是否設法找到解決方案? –

+0

@DaniA我已經找到了解決方案,我的具體問題,但我什至不記得是什麼實際問題,以及我如何解決這個問題:)這是2年前,我沒有代碼在Objective-C很長從那時起。對不起。 – Alexandr

回答

1

好吧myTags沒有分配在內存中,也沒有初始化。另一方面,值@「bla」是一個字符串文字,它實際上是NSString的一個實例,並指向內存中的一個位置。

+0

哦,我現在看到...所以我應該什麼時候初始化'myTags'?或者是不可能使用這樣的自定義類型? – Alexandr

+0

xcode中的運行時屬性用於設置UIElements的值,這些值在加載筆尖時又分配並初始化。 http://spin.atomicobject.com/2014/05/30/xcode-runtime-attributes/ –

+1

通過這種方法無法加載和初始化自定義對象。你需要編寫代碼:)。 –

相關問題