0

在我的应用程序中,JSON 日期字符串在不同时间被解析(在我的视图控制器、详细视图控制器和共享此页面操作中)。我只想设置一个 NSDateFormatter 并在需要时重复使用它。

到目前为止,我有一个 NSObject 文件(UpcomingRelease)

即将发布.h

+ (NSString *) formattedDate:(NSString *)jsonDateString;

即将发布.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];
}

现在在我的 detailViewController 中,我导入了“UpcomingRelease.h”,并且我的 viewLoad 中有这段代码

NSString *formattedDate = [self formattedDate:[_singleRelease objectForKey:@"release_date"]];
self.release_date.text = [NSString stringWithFormat:@"%@", formattedDate];

但我收到一条错误消息:“'ReleaseViewController' 没有可见的@interface 声明选择器'formattedDate:'”。如果我将 formattedDate 代码直接添加到它可以工作的页面(使用 - 而不是 +),但当我尝试从 NSObject 调用它时不会。

我做错了什么?

谢谢。

4

1 回答 1

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];
}
于 2013-11-13T19:44:16.680 回答