Core data 如何在模型层中格式化NSDate

Core data 如何在模型层中格式化NSDate,core-data,model-view-controller,nsdate,Core Data,Model View Controller,Nsdate,我有一个NSDate,我想以10:00PM的格式返回。 我的日期格式化程序正在工作。 我想知道我如何才能使它,以便每当我获取该日期时,它会返回所需的格式。 存储在NSManagedObject中的活动的每日开始时间中的NSDate 子类 @implementation Schedule @dynamic repeat; @dynamic start; -(NSString*)amPMFormat { NSDateFormatter *dateFormatter = [[NSDateF

我有一个NSDate,我想以10:00PM的格式返回。 我的日期格式化程序正在工作。 我想知道我如何才能使它,以便每当我获取该日期时,它会返回所需的格式。 存储在NSManagedObject中的活动的每日开始时间中的NSDate 子类

@implementation Schedule

@dynamic repeat;
@dynamic start;

-(NSString*)amPMFormat
{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
    [dateFormatter setDateFormat:@"h:mm a"];
    return [dateFormatter stringFromDate:self.start];
}

@end
我正在使用键路径填充TableViewCell。绑定到牢房的对象是一个知道时间表的仪式。我的想法是使用keypath调用amPMFormat方法,并将格式化日期作为字符串返回,但这不起作用。这段代码是使用显式TableView创建的单元格。单元格有一个绑定到它的步骤,步骤有一个时间表,时间表有一个开始属性,该属性是一个NSDate,其中只保存了小时和分钟

SCCustomCell *descrCell = [SCCustomCell cellWithText:nil objectBindingsString:@"1:schedule.start.amPMFormat;3:desc" nibName:@"RitualCell"];

您已经对程序的模型和视图部分进行了剪切

日期(
self.start
)是时间上的一个瞬间。您可以使用多种日历、语言、特定于区域设置的格式和精度来表示该日期。这仍然是一个瞬间的时间

格式化程序是构建该瞬间的标准字符串表示的一种方法。如果您希望将日期格式化为“每当[您]获取该日期时”,可以使用
-awakeFromFetch:
填充只读属性。或者是
计划
+formattedStringForDate:
上的一个类方法,它适当地格式化
NSDate
,并返回
NSString


你神秘的第二段提到了“绑定”。您是否正在使用Cocoa绑定并编写OS X应用程序?如果是这样,您可以在XIB中的
NSTextField
实例上放置一个日期格式化程序。

“不工作”到底是怎么回事?您在第二个代码段中调用的方法是什么?它不是一个标准的iOS或OSX方法,那么它用这个字符串做什么呢?非常神秘。使用标准方法和现代点符号,如
label.text=riture.amPMFormat,否则您的代码无法理解。格式化是视图级别的问题。您通常应该避免在模型中这样做。我正在使用Sensive TableView框架将单元格值绑定到模型对象。框架使用Cocoa绑定。向表单元格添加NSDateFormatter。这将在视图级别而不是模型级别对日期进行格式化。我不知道如何在视图和绑定之间获取日期格式化程序,但它似乎可以按照您的建议按计划使用只读属性。我可以看到它是如何影响视图和模型层的。我使用了上面问题中的代码。很高兴它起作用了。请注意,创建NSDateFormatter是一个相当昂贵的对象;考虑将它保持为静态的类级别对象,而不是为每一个仪式制作/销毁新的对象。要在Interface Builder中使用它,请在调色板搜索框中键入“NSDateFormatter”,然后将其拖到NSTextField上。