Где подходящее место для размещения приложения широкого форматирования даты в iOS? - PullRequest
1 голос
/ 31 декабря 2011

В типичном приложении для iOS, куда следует помещать объекты широкого приложения?Я хотел бы централизовать свой код форматирования даты, и мне было бы интересно услышать предложения о передовых методах для этого.

Например, у меня есть следующий код для форматирования даты:

NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
NSString *usFormatString = [NSDateFormatter dateFormatFromTemplate:@"EEE, MMM d YYY" options:0 locale:usLocale];

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = usFormatString;

((UILabel *)[selectedCell.contentView viewWithTag:1]).text = [formatter stringFromDate:date];

Я бы хотел сохранить код форматирования максимально сухим.

РЕДАКТИРОВАТЬ : Это оказалось многокомпонентным ответом, и я применил подход с использованием комбинации Singleton и создания категории для NSString.Я проголосовал против большинства из вас, но я принял @ Jack_Lawrence.

Ответы [ 4 ]

2 голосов
/ 01 января 2012

Для подобных вещей я бы всегда предлагал использовать синглтоны, а не помещать функции в делегат приложения.

В приведенной ниже статье представлен действительно хороший обзор того, как использовать синглтоны и их преимущества.

http://cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html

2 голосов
/ 01 января 2012

Мне нравится использовать категории Objective-C для такого рода вещей. Категории хороши для расширения возможностей существующих объектов, особенно объектов из фреймворков, которые вы не можете контролировать. Удостоверьтесь, что префикс имен методов не конфликтует с текущими / будущими методами, которые Apple может реализовать.

В этом конкретном случае я бы создал категорию на NSDate с именем NSDate + DateFormatting и реализовал бы метод, который возвращает строку NSString из получателя даты:

- (NSString *)JL_stringByFormattingDate
{
    NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
    NSString *usFormatString = [NSDateFormatter dateFormatFromTemplate:@"EEE, MMM d YYY" options:0 locale:usLocale];

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = usFormatString;

    return [formatter stringFromDate:self.date];
}
1 голос
/ 01 января 2012

Синглтон-классы являются возможным решением.По сути, откуда бы вы ни вызывали объект, он будет возвращать один и тот же экземпляр.См. здесь для получения дополнительной информации и инструкции.

1 голос
/ 31 декабря 2011

Обычно на объекты «приложения» можно ссылаться через свойство, которое вы добавляете в делегат вашего приложения.

Итак, создайте NSDateFormatter и присвойте его свойству, на которое вы можете ссылаться от своего делегата, например:

NSDateFormatter * myAppDateFormatter = nil;
MyFineAppDelegate * myAppDelegate = (MyFineAppDelegate *)[[UIApplication sharedApplication] delegate];
if(myAppDelegate)
{
     myAppDateFormatter = myAppDelegate.dateFormatter;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...