Obj-C, почему мои геттеры и сеттеры не работают? - PullRequest
0 голосов
/ 28 января 2011

У меня проблема с моими геттерами и настройками, они не вызываются. Я думал, что понял, как они работают, но, похоже, у меня проблема ...

Я знаю, что не инициализирую представление DateRangeController до того, как использую кнопку выбора, но зная его значение, я могу установить значения в viewDidLoad. Если мне нужно его инициализировать, как мне установить файл пера и т.д?

Это мой родительский экран, где я устанавливаю значения и получаю значения

@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";   
}

Вот мой выбор / дочерний экран.

@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];
}

1 Ответ

0 голосов
/ 28 января 2011

попробуйте сравнить «значение» с помощью функции isEqualToDate вместо оператора «! =»:

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

РЕДАКТИРОВАТЬ: если вам нужен nextController для хранения startDate в viewWillAppear, вы должны инициализировать его там (или, что еще лучше, в viewDidLoad), а не в buttonPressed-Method, перед назначением startDate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...