iOS7-存储按下按钮的NSDate值以供以后使用
当按下按钮时,我需要捕获NSDate的结果,以便稍后在应用程序中使用它。 执行此操作的最佳方式/代码是什么 更新 很抱歉没有包括更多信息。这个网站是新手,不知道协议 所以我知道如何对按下按钮做出反应。然而,虽然我已经将NSDate的结果写入了timeStampLabel,但我真正想做的是将NSDate的结果保存到一个键?或者类似的,以便我以后使用。我要求数据可供其他类访问,但是,如果应用程序完全关闭(即刷起并离开屏幕),则无需保留数据 我目前拥有的代码是:iOS7-存储按下按钮的NSDate值以供以后使用,ios,ios7,nsdate,Ios,Ios7,Nsdate,当按下按钮时,我需要捕获NSDate的结果,以便稍后在应用程序中使用它。 执行此操作的最佳方式/代码是什么 更新 很抱歉没有包括更多信息。这个网站是新手,不知道协议 所以我知道如何对按下按钮做出反应。然而,虽然我已经将NSDate的结果写入了timeStampLabel,但我真正想做的是将NSDate的结果保存到一个键?或者类似的,以便我以后使用。我要求数据可供其他类访问,但是,如果应用程序完全关闭(即刷起并离开屏幕),则无需保留数据 我目前拥有的代码是: - (IBAction)tripBut
- (IBAction)tripButton:(id)sender {
NSDate *date = [NSDate date];
self.timeStampLabel.text = [NSString stringWithFormat:@"%@ ", date];
}
您可以在应用程序委托中声明变量:
@interface AppDelegate : UIResponder <UIApplicationDelegate, UINavigationControllerDelegate> {
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) UINavigationController *navigationController;
@property (nonatomic) NSDate* timeStamp;
@end
然后在viewDidLoad中初始化它:
- (void)viewDidLoad {
mainDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
现在你可以从任何地方访问它。在这种情况下
- (IBAction)tripButton:(id)sender {
NSDate *date = [NSDate date];
self.timeStampLabel.text = [NSString stringWithFormat:@"%@ ", date];
mainDelegate.timeStamp = date;
}
然后在另一个类中,例如:
- (NSDate*)getTimeStamp {
return mainDelegate.timeStamp;
}
您有两个不同的问题: 如何保存日期值以备以后使用 如何在应用程序中的不同对象之间传递数据 第一个问题可以通过生成NSDate或NSTimeInterval属性来解决 第二个问题可以通过多种方式解决。我建议创建一个数据容器singleton。单例对象是一个设计为在程序生命周期中只创建一次,然后在整个过程中使用的对象。通常,您会创建一个名为sharedDataObject的类方法,该类方法会在您第一次需要对象时创建该对象,并将其保存在静态变量中: 标题:
@interface DataContainerObject: NSObject
@property (nonatomic, strong) NSDate *dateToSave;
+ (DataContainerObject *) sharedDataObject;
@end
实施:
@implementation DataContainerOBject:
+ (DataContainerObject *) sharedDataObject;
{
static DataContainerObject* _sharedDataObject;
if (_sharedDataObject == nil)
_sharedDataObject = [[DataContainerObject alloc] init];
return _sharedDataObject;
}
因此,我知道有三种方法可以处理iOS中不同视图控制器之间的信息传递 Lindsey Scott的回答建议将信息作为属性存储在应用程序委托上,并进入应用程序委托以设置/检索数据。 DuncanC的回答解释了我更喜欢的方法,使用单例。 我知道的第三种方法是在需要信息的视图之间直接传递信息。如果您只需要从一个视图中传递数据,而该视图是在将信息传递给该视图之前立即显示的,那么这很容易管理 假设你使用的是segues,你会这样做 给定ViewController1和ViewController2,为ViewController2提供一个NSDate公共属性来存储您传递给它的日期。在本例中,我们将其称为passedDate。我们还将为ViewController1提供一个私有属性,可能是为了临时存储日期,在本例中我们将其称为dateToPass。这两种属性都应该是强的 现在,在ViewController1中,处理按钮按下的iAction将如下所示:
-(IBAction)buttonPressed:(id)sender {
self.dateToPass = [NSDate date];
[self performSegueWithIdentifier:@"segueMySegue" sender: self];
}
现在按下按钮将日期保存到属性并调用segue。值得注意的是,我们不必在这个单按钮按下中同时执行这两个操作。最重要的是将按键上的日期保存到属性中,以便以后可以访问它。您可以在任何时候/任何时候执行该步骤
现在,为了实际传递数据,我们将覆盖prepareforsgue:方法:
现在,我们已经在下一个视图控制器上设置了属性passedDate,以指向我们在按下按钮时设置的dateToPass日期对象。我们可以在ViewController2中访问此属性,并对其执行我们需要执行的任何操作。这里涉及很多步骤。什么给你带来了麻烦?你知道如何应对按键吗?您知道如何保存变量,以便以后在不同的方法或不同的类中使用吗?你知道如何获取你要存储的日期吗?你已经有了日期了吗?它应该保存多长时间?你已经有了什么存储空间?编辑这个,包括你在问题中所做的很少的代码。已经做了。谢谢很抱歉,新到这个网站,不知道协议。谢谢大家。我选择了第三个选项,虽然我尝试了所有三个选项,但都有效!好的,完整的答案。
-(IBAction)buttonPressed:(id)sender {
self.dateToPass = [NSDate date];
[self performSegueWithIdentifier:@"segueMySegue" sender: self];
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"segueMySegue"]) {
ViewController2 *dest = [segue destinationViewController];
dest.passedDate = self.dateToPass;
}
}