objective-c - Objective C - 无法在一种方法中设置值并从另一种方法访问它

标签 objective-c ios nsdate

我正在尝试执行以下操作:

1) 用户点击按钮开始,它运行startTimer方法,设置一个新的[NSDate date]

2) 用户点击按钮 stop 它运行 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);
}

最佳答案

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

关于objective-c - Objective C - 无法在一种方法中设置值并从另一种方法访问它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12378982/

相关文章:

iphone - 日期时间到 NSDate

iphone - 我如何从 Objective-C 中的类属性中获取值?

iphone - ECSliding,在LeftViewController下更改

objective-c - NSDate 获取年/月/日

ios - 如何在 xcode 6 中设置表格单元格颜色?

ios - Objective-C 中的开放时间 - 两次 NSDate 之间的时间

cocoa - cocoa 的时间比较

ios - 突出显示 uitextview 显示 inputAccessoryView

ios - 旋转图像缩小我的图像

ios - URLSessionUploadTask 立即自动取消