我正在通过第一个应用程序进行工作,并且需要一些有关如何处理下一个任务和问题的建议。该应用程序的前提是用户具有表格视图,单击导航栏中的加号按钮,并显示文本字段以插入信息。单击保存后,该内容将保存到核心数据并显示在表格视图中。

表格视图已剖开。现在,我将“日期”表示为NSString,只是为了使我的应用程序起步,但是我需要将其更改为DatePicker。这些部分基于日期。

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

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

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

    如前所述,首先,为了使我的应用程序正常运行,我使Date实体具有dateOfEvent属性,该属性是NSString而不是NSDate,但是从长远来看当然不起作用。

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

    独立地,我有一个DatePicker,没有任何问题,但是它将信息输出到文本字段中的String。

    我现在想要实现的是使用DatePicker,选择一个日期,然后将其保存到Core Data Date实体(dateOfEvent属性)中,然后在表格视图中将其用作部分标题。

    这是我保存在视图控制器中的代码:
    - (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.
    }
    

    enterDate会调用特定的caseWithDate方法:
    + (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以确保我返回的是现有日期,或者如果不存在则添加一个新日期。

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

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

    我想查看日期是否存在的原因是,如果2013年12月2日有 Activity ,它将是唯一的。但是,如果我在2013年12月2日创建另一个 Activity ,我希望它使用现有的12月2日,而不是为12月2日创建第二个条目。原因是我的应用程序具有选项卡视图,其中第二个选项卡以日期为准,因此我不希望在那里有两个单独的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;
    }
    

    编辑:上面的“保存到核心数据”方法-当dateOfEvent属性为NSString时,它会调用casesWithDate方法并检查日期是否已经存在。因为我需要在表格视图中按升序对日期进行排序,所以我将dateOfEvent更改为NSDate格式

    为了获取当前日期和时间,我将以下代码放入save方法中:
    Date *date = [NSEntityDescription insertNewObjectForEntityForName:@"Date" inManagedObjectContext:context];
    
    date.dateOfEvent = [NSDate date];
    transaction.dates = date;
    

    那就是我当前的日期和时间。我想要的是让用户使用UIDatePicker选择日期,并选择任何日期,然后将其保存为Date实体的dateOfEvent属性,然后可以在Table视图的Sections中使用。

    最佳答案

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

    日期

    日期选择器显示的日期。

    @property(nonatomic, retain) NSDate *date
    

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

    查看Apple UIDatePicker文档

    09-20 02:08