2012-04-19 2 views
1

Мне жаль задавать такой тривиальный вопрос. Я новичок в Objective-C, & просто не вижу, как это работает, попробовав несколько возможных способов: & google'd для него. Пожалуйста помоги! Мой вопрос прост. У меня есть NSDate объект уровня класса, который объявлен вне любого метода в классе как:Значение NSDate недоступно через методы

NSDate *fromDate; 

Теперь в методе, ставит это значение даты из DatePicker как:

fromDate = [datePicker date]; 

Вскоре после указанного назначения я распечатаю его значение в журнале &, он отлично работает.

NSLog(@"From Date: %@", fromDate); 

Теперь, когда я использую значение NSDate в другом/другом методе, значение ушло! Почему это не сохраняется в методах одного и того же класса? Что я могу сделать для того, чтобы ценность была доступна для всех методов?


Спасибо за ваш ответ.

Привет Remy,

  1. Я не знаю, Objective-C не имеет переменный уровень класса! Спасибо, что указали!

  2. Да, я установил проект (в Xcode) для ARC (так что я считаю, что это должно позаботиться).

  3. Вот код:

В ViewController.h

.... 
.... 
@property (nonatomic, retain) NSDate *historyFromDate; 
@property (nonatomic, retain) NSDate *historyToDate; 
.... 
.... 
-(IBAction) fromDateChosen: (id)sender; 
-(void) fetchTheHistory; 

В ViewController.m

... 
... 
@synthesize historyFromDate; 
@synthesize historyToDate; 
.... 
.... 

-(IBAction) fromDateChosen: (id)sender { 

NSString *buttonTitle = @"I've chosen the 'FROM' date"; 

if ([[buttonDateChosen currentTitle] isEqualToString:buttonTitle]) { 

    NSLog(@"User has chosen the 'From' date"); 

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
    [dateFormatter setTimeStyle:NSDateFormatterMediumStyle]; 

    // Get the chosen date value 
    NSDate *fromDate = [datePicker date]; 
    historyFromDate = fromDate; 



    // Set the 'to' date label to reflect the user's choice 
    labelFromDate.text = [dateFormatter stringFromDate:historyFromDate]; 
    NSLog(@"'From' Date Chosen:%@", historyFromDate); 
      //[dateFormatter stringFromDate:[datePicker date]]); 

    [self fetchTheMoodHistory]; 
} 
} 
... 
... 
... 

-(void) fetchTheHistory { 

NSLog(@"Calling fetchTheHistory for the period from %@", historyFromDate); 
... 
... 
} 

... 
... 

fromDateChosen вызывается после того, как пользователь выбирает дату сформируйте объект Date Picker в пользовательском интерфейсе. В рамках метода 'fromDateChosen', когда я печатаю historyFromDate, значение является правильным. Но, когда я печатаю его в fetchTheHistory, значение показывает текущую дату/время (а не тот, который выбрал пользователь).

+0

Вы уверены, что используете ARC? Свойство ARC использует сильное/слабое, а не ключевое слово сохранения. – Andy

+0

@Jean Вы когда-нибудь выяснили решение этой проблемы? Я работаю над приложением, и я столкнулся с такой же проблемой. – yiwei

+0

@Jean Ничего, я разработал свою проблему. Я использовал «NSCoding» для кодирования моего класса, и я оставил строки для кодирования и декодирования моего свойства «NSDate». – yiwei

ответ

0

Свойство даты UIDatePicker сохраняется этим классом и будет доступно до тех пор, пока сам сборщик дат находится в области действия и действителен (не выпущен). Вы сохраняете это значение даты в переменной, но не сохраняете ее самостоятельно, поэтому, когда выбор даты выходит из области действия, вы теряете значение. В качестве быстрого решения сделайте это вместо этого;

fromDate = [[datePicker date] retain]; 

Теперь, это не лучший подход, вы действительно должны делать дату свойством любого класса, использующего эту информацию.

0

Попробуйте поместить переменную fromDate под класс scope, e.g:

@implementation ViewController 
{ 
    NSDate *fromDate; 
} 
Смежные вопросы