Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS7-存储按下按钮的NSDate值以供以后使用_Ios_Ios7_Nsdate - Fatal编程技术网

iOS7-存储按下按钮的NSDate值以供以后使用

iOS7-存储按下按钮的NSDate值以供以后使用,ios,ios7,nsdate,Ios,Ios7,Nsdate,当按下按钮时,我需要捕获NSDate的结果,以便稍后在应用程序中使用它。 执行此操作的最佳方式/代码是什么 更新 很抱歉没有包括更多信息。这个网站是新手,不知道协议 所以我知道如何对按下按钮做出反应。然而,虽然我已经将NSDate的结果写入了timeStampLabel,但我真正想做的是将NSDate的结果保存到一个键?或者类似的,以便我以后使用。我要求数据可供其他类访问,但是,如果应用程序完全关闭(即刷起并离开屏幕),则无需保留数据 我目前拥有的代码是: - (IBAction)tripBut

当按下按钮时,我需要捕获NSDate的结果,以便稍后在应用程序中使用它。 执行此操作的最佳方式/代码是什么

更新

很抱歉没有包括更多信息。这个网站是新手,不知道协议

所以我知道如何对按下按钮做出反应。然而,虽然我已经将NSDate的结果写入了timeStampLabel,但我真正想做的是将NSDate的结果保存到一个键?或者类似的,以便我以后使用。我要求数据可供其他类访问,但是,如果应用程序完全关闭(即刷起并离开屏幕),则无需保留数据

我目前拥有的代码是:

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