gpt4 book ai didi

ios - 将核心数据属性从 NSString 更改为 NSDate 并使用日期选择器使此功能正常工作

转载 作者:行者123 更新时间:2023-11-29 12:58:49 26 4
gpt4 key购买 nike

我正在开发我的第一个应用程序,需要一些关于如何处理下一个任务和问题的建议。该应用程序的前提是用户有一个 TableView ,单击导航栏中的加号按钮并显示文本字段以插入信息。单击保存后,它会保存到核心数据并显示在 TableView 中。

表格 View 是分段的。现在,我将“日期”表示为 NSString,只是为了启动我的应用程序,但我需要将其更改为 DatePicker。这些部分基于日期。

我有一个核心数据模型如下:

  • 交易实体
  • 个人实体
  • 场合实体
  • 日期实体

交易实体与此处的每个其他实体都有关系。

如前所述,起初,为了让我的应用正常运行,我让日期实体有一个 dateOfEvent 属性,它是一个 NSString 而不是 NSDate,但当然从长远来看这不会起作用。

我已将此属性的模型更改为 NSDate,并重新生成了 NSManagedObject 子类。

独立地,我有一个 DatePicker 可以正常工作,但它将信息输出到文本字段中的字符串。

我现在想要实现的是使用 DatePicker,选择一个日期并将其保存到核心数据日期实体(dateOfEvent 属性),然后我可以在 TableView 中将其用作部分标题。

这是我在 View Controller 中保存的代码:

- (IBAction)save:(id)sender
{
NSManagedObjectContext *context = [self managedObjectContext];
Transaction *transaction = [NSEntityDescription insertNewObjectForEntityForName:@"Transaction" inManagedObjectContext:context];
Date *enteredDate = (Date *)[Date occasionWithDate:self.dateTextField.text inManagedObjectContext:context];
transaction.dates = enteredDate;
// Code to save Person, Occasion, etc.
}

enteredDate 正在调用特定的 occasionWithDate 方法:

+ (Date *)occasionWithDate:(NSString *)enteredDate inManagedObjectContext:(NSManagedObjectContext *)context
Date *date = nil;
// Creating a fetch request to check whether the name of the person already exists
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Date"];
request.predicate = [NSPredicate predicateWithFormat:@"dateOfEvent = %@", enteredDate];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"dateOfEvent" ascending:YES];
request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor];

NSError *error = nil;
NSArray *dates = [context executeFetchRequest:request error:&error];
if (!dates)
{
// Handle Error
}
else if (![dates count])
{
// If the person count is 0 then let's create it
date = [NSEntityDescription insertNewObjectForEntityForName:@"Date" inManagedObjectContext:context];
date.dateOfEvent = enteredDate;
}
else
{
// If the object exists, just return the last object .
date = [dates lastObject];
}
return date;
}

这会执行一个 fetchRequest 以确保我要么返回一个现有日期,要么添加一个新日期(如果不存在)。

这就是我想要的行为,但当然,该方法正在传递一个字符串,我需要传递一个日期。

考虑到这一点,我该如何选择 DatePicker 的值,以与上述相同的方式将其添加到 Core Data 数据库(检查日期是否存在)并将其显示在表的各部分中查看?

我想检查日期是否存在的原因是因为如果 2013 年 12 月 2 日有事件,它将是唯一的。但是,如果我在 2013 年 12 月 2 日创建另一个事件,我希望它使用现有的 12 月 2 日,而不是为 12 月 2 日创建第二个条目。原因是我的应用程序有一个选项卡 View ,其中第二个选项卡由日期决定,所以我不希望有两个单独的 12 月 2 日。

这是一个旁注。 我想实现的主要目标是,使用日期选择器并将所选值保存到 Transaction.dates.dateOfEvent 到核心数据。

我知道我是否要做类似 date.dateOfEvent = [NSDate date] 的事情;它将现在分配日期和时间。这不是我想要的。

如有任何帮助,我们将不胜感激。

谢谢,

编辑:添加 UIDatePicker 代码 - 下面的第一个代码片段用于在使用 NSString 作为属性时保存到 textField

viewDidLoad

    [self.datePicker addTarget:self action:@selector(getSelection:) forControlEvents:UIControlEventValueChanged];

-(void)getSelection:(id)sender
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterLongStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];

NSDate *date = [self.datePicker date];

NSString *formattedDateString = [dateFormatter stringFromDate:date];
self.dateTextField.text = formattedDateString;
}

编辑:保存到核心数据的方法如上 - 它调用 occasionWithDate 方法并在 dateOfEvent 属性为 NSString 时检查日期是否已经存在。因为我需要在 TableView 中按升序日期排序,所以我将 dateOfEvent 更改为 NSDate 格式

要获取当前日期和时间,我将这段代码放在保存方法中:

Date *date = [NSEntityDescription insertNewObjectForEntityForName:@"Date" inManagedObjectContext:context];

date.dateOfEvent = [NSDate date];
transaction.dates = date;

这是给我当前的日期和时间。我想要的是让用户使用 UIDatePicker 选择日期以及选择的任何日期,以便将其保存为 Date 实体的 dateOfEvent 属性,然后我可以在 TableView 的部分中使用它。

最佳答案

要从 UIDatePicker 对象获取 NSDate,请使用 UIDatePicket date 属性。

日期

日期选择器显示的日期。

@property(nonatomic, retain) NSDate *date

讨论默认是创建 UIDatePicker 对象的日期。在模式 UIDatePickerModeCountDownTimer 中忽略日期;对于该模式,日期选择器从 0:00 开始。设置此属性不会通过将轮子旋转到新的日期和时间来为日期选择器设置动画;为此,您必须使用 setDate:animated: 方法。

检查苹果UIDatePicker文档

关于ios - 将核心数据属性从 NSString 更改为 NSDate 并使用日期选择器使此功能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20311351/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com