我有一个应用程序,可以从UIDatePicker中保存文本和日期,然后在UIDatePicker中重新显示该日期时显示该注释。
它的作品很棒!只有我发现将UIDatePicker日期设置为今天才能阻止CoreData工作!
仅当我运行此setDate行时才会停止核心数据的运行。该应用程序运行良好而不会崩溃,它只是不保存任何数据。如果我评论这条线,它的作品很有魅力。但是,当应用程序加载时,我需要在今天使用UIDatePicker。
我在应用程序启动时使用它:
NSDate *now = [[NSDate alloc] init];
[datePicker setDate:now];
这是为了获取笔记:
NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
NSEntityDescription *testEntity = [NSEntityDescription entityForName:@"DatedText" inManagedObjectContext:self.managedObjectContext];
[fetch setEntity:testEntity];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"dateSaved == %@", datePicker.date];
[fetch setPredicate:pred];
NSError *fetchError = nil;
NSArray *fetchedObjs = [self.managedObjectContext executeFetchRequest:fetch error:&fetchError];
if (fetchError != nil) {
NSLog(@"fetchError = %@, details = %@",fetchError,fetchError.userInfo);
}
noteTextView.text = [[fetchedObjs objectAtIndex:0] valueForKey:@"savedText"];
这是为了保存笔记:
NSManagedObject *newDatedText;
newDatedText = [NSEntityDescription insertNewObjectForEntityForName:@"DatedText" inManagedObjectContext:self.managedObjectContext];
[newDatedText setValue:noteTextView.text forKey:@"savedText"];
[newDatedText setValue:datePicker.date forKey:@"dateSaved"];
NSError *saveError = nil;
[self.managedObjectContext save:&saveError];
if (saveError != nil) {
NSLog(@"[%@ saveContext] Error saving context: Error = %@, details = %@",[self class], saveError,saveError.userInfo);
}
答案 0 :(得分:2)
请记住,NSDate不仅会保存DD / MM / YYYY,还会保存HH:MM:SS。
我猜想当你从选择器中选择一个DD / MM / YYYY时,它会以0:00:00的默认时间保存,但在上面的情况下,当您将选择器日期设置为现在时,您实际上正在操作HH:MM:SS到其他东西(即使你没有手动看到它)。
为了说明我想说的内容,当你使用谓词(dateSaved == picker.date)获取时,它正在寻找DD / MM / YYYY 00:00:00格式的日期论证,你可能已经将它保存在DD / MM / YYYY 09:00:01。
如果您希望这样做,您需要对NSDate属性进行一些格式化。
答案 1 :(得分:0)
默认情况下,Datepicker仅设置为今天的日期。您不需要手动执行此操作。