0

私は次のことをしようとしています:

1) ユーザーがボタンstartstartTimerをクリックすると、新しい を設定するメソッドが実行されます[NSDate date]

2) ユーザーがボタンをクリックすると、値を取得するメソッドが実行されますstopTimer[NSDate date]

ステップ2が機能しません。.hファイルに設定しました。コードを start メソッドから stop メソッドにコピーすると、機能します。だから、私は設定することができます[NSDate date]。しかし、これは私が望むものではありません。startTimerメソッドで設定できるようにしたいです。どうすればいいですか?

.h ファイル

@interface StartTest : UIViewController {
    IBOutlet UILabel *timer;

    NSDate *startNSDate;
    NSDate *start;



}

- (IBAction)startTimer;
- (IBAction)stopTimer;

- (NSDate *)setStart;
- (NSDate *)getStart;


@end

.m ファイル:

@implementation Ash

- (IBAction)startTimer {

    startNSDate = [NSDate date];

}


- (IBAction)stopTimer{

    start = [NSDate date];


    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy"];


    NSString *stringFromDate = [formatter stringFromDate:startNSDate]; // <<< this is where it fails

    NSLog(@"stringfromdate: %@", stringFromDate);
}
4

1 に答える 1

2

startNSDate は保持されておらず、アクセスしたいときにはすでに割り当てが解除されているため、ガベージ ポインターにアクセスしようとしています。

あなたにとって最も簡単な解決策は

@interface StartTest : UIViewController {
    IBOutlet UILabel *timer;

    NSDate *startNSDate;
    NSDate *start;



}
@property (nonatomic, strong) NSDate* startNSDate;

- (IBAction)startTimer;
- (IBAction)stopTimer;

- (NSDate *)setStart;
- (NSDate *)getStart;


@end




@implementation Ash

- (IBAction)startTimer {

    self.startNSDate = [NSDate date];

}


- (IBAction)stopTimer{

    start = [NSDate date];


    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy"];

    // this is where it fails, the reason being that startNSDate isn't retained
    // and by this line, it's already dealloc'd, hence you're trying to access
    // garbage pointer
    NSString *stringFromDate = [formatter self.startNSDate]; 

    NSLog(@"stringfromdate: %@", stringFromDate);
}

- (void)dealloc
{
    self.startNSDate = nil;
    [super dealloc];
}
于 2012-09-11T23:00:06.557 に答える