我正在尝试执行以下操作:
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/