在我的应用程序中,JSON日期字符串会被解析不同的时间(在我的视图控制器,详细视图控制器和共享此页面操作中)。我想只设置一个NSDateFormatter并在必要时重复使用它。
到目前为止,我有一个NSObject文件(UpcomingRelease)
UpcomingRelease.h
+ (NSString *) formattedDate:(NSString *)jsonDateString;
UpcomingRelease.m
+ (NSString *) formattedDate:(NSString *)jsonDateString {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"];
NSDate *readableDate = [dateFormatter dateFromString:jsonDateString];
[dateFormatter setDateFormat:@"MMMM dd"];
return [dateFormatter stringFromDate:readableDate];
}
现在在我的detailedViewController中导入了“UpcomingRelease.h”,我在viewLoad中有了这段代码
NSString *formattedDate = [self formattedDate:[_singleRelease objectForKey:@"release_date"]];
self.release_date.text = [NSString stringWithFormat:@"%@", formattedDate];
但是我得到一个错误说:“'ReleaseViewController'没有可见的@interface声明选择器'formattedDate:'”。如果我将formattedDate代码直接添加到它工作的页面(使用 - 而不是+),但是当我尝试从NSObject调用它时不会。
我做错了什么?
感谢。
答案 0 :(得分:2)
改变这个:
NSString *formattedDate = [self formattedDate:[_singleRelease objectForKey:@"release_date"]];
为:
NSString *formattedDate = [UpcomingRelease formattedDate:[_singleRelease objectForKey:@"release_date"]];
由于您将formattedDate:
定义为类方法,因此需要在类上调用它。
正如评论中指出的那样,你的代码效率非常低,因为每次使用该方法时都会重新创建日期格式化程序实例。
+ (NSString *) formattedDate:(NSString *)jsonDateString {
static NSDateFormatter *jsonFormatter = nil;
static NSDateFormatter *readableFormatter = nil;
if (!jsonFormatter) {
jsonFormatter = [[NSDateFormatter alloc] init];
[jsonFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"];
readableFormatter = [[NSDateFormatter alloc] init];
[readableFormatter setDateFormat:@"MMMM dd"];
// Note - this code will not deal with a user changing the Region Format on their device
}
NSDate *readableDate = [jsonFormatter dateFromString:jsonDateString];
return [readableFormatter stringFromDate:readableDate];
}