2011-01-28 3 views
0

getterや設定に問題があり、呼び出されていません。私は彼らがどのように働いているか理解していると思っていましたが、問題があるように見えます...Obj-C、なぜ私のゲッターとセッターは動作していないのですか?

私はselectボタンを使用する前にDateRangeControllerビューを初期化していませんが、そのnilを知っていればviewDidLoad 。私はそれを初期化する必要がある場合、どのようにnibファイルなどを設定するのですか?

これは私が値を設定し、私の選択/子画面相続値

@interface PieChartViewController : UIViewController { 
    DateRangeController *nextController; 
} 
@property (nonatomic, retain) DateRangeController *nextController; 
@implementation PieChartViewController 
@synthesize nextController; 

-(void)viewWillAppear:(BOOL)animated { 
    if ([nextController StartDate] == nil) { 
     [nextController setStartDate:[NSDate date]]; 
    } 

    // DBStartDate returns nil and yes convertNSDateToDBStringDate works ! 
    NSString* DBStartDate = [General convertNSDateToDBStringDate: 
     [nextController StartDate]]; 
} 
- (void) selectRangeButtonPressed { 
    nextController = [[[DateRangeController alloc] 
     initWithNibName:@"DateRange" bundle:nil] autorelease]; 
    nextController.title = @"Date Range"; 
} 

を得ている私の親画面、です。あなたはviewWillAppearでたstartDateを格納するnextControllerが必要な場合は、:

if(![value isEqualToDate: returnStartDate]) { ...} 

EDIT: - "!=" 演算子の関数の代わりに -

@interface DateRangeController : UIViewController { 
NSDate *returnStartDate; 
} 
-(NSDate*) StartDate; 
-(void)setStartDate:(NSDate*) value; 
@end 
@implementation DateRangeController 
-(NSDate*) StartDate { 
    return returnStartDate; 
} 
-(void)setStartDate:(NSDate*) value { 
    if (value != returnStartDate) { 
     [value retain]; 
     [returnStartDate release]; 
     returnStartDate = value; 
     NSLog(@"StartDate=%@", returnStartDate); 
    } 
} 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *) 
     nibBundleOrNil { 
    if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { 
     // Custom initialization 
     returnStartDate = nil; 
    } 
    return self; 
} 
- (void)dealloc { 
    [returnStartDate release]; 
} 
+0

私はあなたが欠けていたと思う**非公開、非保持DateRangeController * nextController; ** – EmptyStack

+1

あなたは本当にあなたの関数と変数を小文字で始めるべきです。クラスは大文字で始める必要があります。コード倫理:) – Jake

+1

申し訳ありません@サイモン、上に貼り付けることを忘れて、私はそれを持っています。 @MiRAGe良い点! – Jules

答えて

0

はisEqualToDateで "値" を比較してみてくださいstartDateを割り当てる前に、buttonPressedメソッドではなく、viewDidLoadで初期化する必要があります(さらには、viewDidLoadで)。

+0

retainプロパティのセッターの目的は* pointer *を置き換えることです。したがって、ここでは '!='を使って 'NSDate * 'ポインタを比較するのは正しいです。 – BoltClock

+0

私はそれを行うことができましたが、とにかく!=行を呼び出すことはありません。 – Jules

+0

@Jules:あなたのコードから、nextControllerがあまりにも遅く割り当てられたようです。結果を得るには、ボタンを押してビューを再ロードする必要があります(ビューを再度表示する)。ビューの初期化を試み、getters/setterが呼び出されたかどうかを確認してください。 –

関連する問題