2012-04-26 64 views
1

我可能忽略了一些小事,但我似乎無法弄清楚。將伊娃設置爲自定義亞類對象不工作

我正在嘗試將自定義類的實例傳遞給另一個自定義類的實例。 注:我使用ARC *

第二個自定義類設置:

#import "OneArtsDay.h" 

@interface SocialButton : UIButton {  
    OneArtsDay *artsDay; 
} 

@property (nonatomic) OneArtsDay *artsDay; 

- (void)setArtsDay:(OneArtsDay *)day; 

@end 

#import "SocialButton.h" 

@implementation SocialButton 
@synthesize artsDay; 

- (void)setArtsDay:(OneArtsDay *)day { 
    if (day ==nil) { 
    NSLog(@"Error, cannot set artsDay"); 
    } 
    else { 
    artsDay = day; 
    } 
} 

@end 

現在,當我在代碼中調用這些命令:

SocialButton *social = [[SocialButton alloc] init]; 
    OneArtsDay *day = [[OneArtsDay alloc] init]; 
    //Do things with day here// 
    [social setArtsDay:day]; 

我仍然有一個錯誤,當我嘗試訪問屬性OneArtsDay * artsDay。我錯過了什麼?

+3

當你說它不起作用你是什麼意思?什麼不起作用? – 2012-04-26 22:37:59

+0

而不是(非原子)使用(強,非原子),所以它會保持一個強大的指針,你的對象。這僅適用於ARC。另請使用setter self.artsDay = day; – 2012-04-26 23:05:22

+0

我給出的錯誤是一個'NSInvalidArgumentException ..無法識別的選擇器發送到實例..',併發生當我嘗試訪問屬性OneArtsDay * artsDay – achi 2012-04-27 00:05:24

回答

2

該屬性應該聲明爲強。以下是我如何編碼同樣的事情:

#import "OneArtsDay.h" 

@interface SocialButton : UIButton 

// property decl gives me the file var and the public getter/setter decls 
// strong tells ARC to retain the value upon assignment (and release the old one) 
@property (nonatomic, strong) OneArtsDay *artsDay; 

@end 


#import "SocialButton.h" 

@implementation SocialButton 

// _underscore alias let's me name stack vars and prams the same name as my property 
// without ambiguity/compiler warnings 

@synthesize artsDay=_artsDay; 

- (void)setArtsDay:(OneArtsDay *)artsDay { 
    if (artsDay==nil) { 
     NSLog(@"Error, cannot set artsDay"); 
    } else { 
     _artsDay = artsDay; 
    } 
} 

@end 
+0

雖然這是我該怎麼做,它實際上是否改變任何東西?我認爲'__strong'是默認的變量限定符,這意味着OP顯式聲明的伊娃實際上是在聲明一個'__strong' ivar。在ARC中,'strong'更適合,然後'保留',即使它們是同義詞。 – 2012-04-26 23:04:21

+0

該類需要在ARC中保留一個「強」指向該對象的指針,否則它可能會被釋放。 – 2012-04-26 23:08:54

+0

是的。每弧有回火。謝謝。將編輯。 – danh 2012-04-26 23:37:19

相關問題