2012-04-26 17 views
1

私はおそらく小さなものを見落としていますが、私はそれを理解できないようです。カスタムサブオブジェクトにivarを設定しても動作しません

カスタムクラスのインスタンスを別のカスタムクラスのインスタンスに渡そうとしています。 注:

#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 

を今、私はコードでこれらのコマンドを呼び出すとき:

私は2番目のカスタムクラスが設定されている*

をARCを使用しています

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

私はまだエラーが発生します。 OneArtsDay * artsDayプロパティにアクセスしてみてください。私は何が欠けていますか?

+3

どういう意味ですか?何が効いていないのですか? –

+0

(非原子的)の代わりに(強い、非原子的)使用すると、オブジェクトへの強いポインタが保持されます。これはARC専用です。setter self.artsDay = dayも使用してください。 –

+0

私が与えたエラーは、 'NSInvalidArgumentException ..インスタンスに送信された認識できないセレクタ...'で、プロパティにアクセスしようとすると発生します。OneArtsDay * artsDay – achi

答えて

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の明示的なivarの宣言が実際に' __strong'のivarを宣言していたことを意味します。また、それらが同義語であっても、ARCでは 'strong'がより適切です。 –

+0

クラスはARC内のオブジェクトへの"強い "ポインタを保持する必要があります。 –

+0

はいはい。アークフラッシュバックがあった。どうも。編集します。 – danh

関連する問題