我已经为 NSDate (NSDate+Helpers) 创建了一个 helpers 类别。这是我将在类别实现中使用的日历对象的缓存:
static NSCalendar* currentCalendar = nil;
@implementation NSDate (Helpers)
+(void)initialize{
currentCalendar = [NSCalendar currentCalendar];
}
@end
问题是我的应用程序不再启动。我只看到黑屏。我想知道我做错了什么。你可以在干净的测试项目上遇到同样的问题。
最佳答案
当您使用类别覆盖现有方法时,您覆盖了原始实现,因此 NSDate
的原始 +initialize
方法永远不会被执行。在这种情况下,看起来它正在该方法中执行某些对其自身内部功能来说是必需的操作,这会破坏您的应用。
即使这不是问题,重写 +initialize
方法也是一个坏主意,而进行任何自定义对象实例化更是一个特别糟糕的主意。
尝试在其他地方初始化日历对象,例如在 applicationDidFinishLaunchingWithOptions:
中,在您的应用程序的委托(delegate)中。
您可以做的另一件事是在您的类别中将日历实现为单例,如下所示:
@implementation NSDate (Helpers)
- (NSCalendar *)myCurrentCalendar {
static NSCalendar *currentCalendar; // static property
static dispatch_once_t onceToken; // token for dispatch
dispatch_once(&onceToken, ^{
currentCalendar = [NSCalendar currentCalendar]; // initialise
});
return currentCalendar; // return the calendar
}
然后,当您需要使用它时,您可以通过 [NSDate myCurrentCalendar]
访问它。这将在您第一次调用此方法时初始化日历,并且在后续调用此方法时将立即返回日历。
关于ios - 无法在 NSDate 类别的初始化方法中初始化静态日历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24205822/