iOS programming in 2010

Jak wyświetlić lokalizowane nazwy miesięcy?

Posted: September 14th, 2010 | Author: | Filed under: Xcode solutions | Comments Off on Jak wyświetlić lokalizowane nazwy miesięcy?

Problem wydaje się banalny, ale nie mając doświadczenia z Objective-C możemy spędzić dużo czasu szukając odpowiednich obiektów.
Przedstawiam więc gotowe rozwiązanie:

Tworzymy obiekt “Kalendarz”, który na podstawie przesÅ‚anego obiektu NSDictionary zwróci nazwÄ™ miesiÄ…ca:

Kalendarz.h
@interface Kalendarz : NSObject {
}
-(NSString *)jakiMiesiac:(NSDictionary *)rokMiesiacDzien;
@end

Kalendarz.m
@implementation Kalendarz

-(NSString *)jakiMiesiac:(NSDictionary *)rokMiesiacDzien;
{
NSInteger miesiacNumber=[[rokMiesiacDzien valueForKey:@"month"] intValue]; // tutaj odczytujemy wartość Integer miesiąca
return [[self dateCreate:miesiacNumber] autorelease];
}

-(NSString *)dateCreate:(NSInteger)month
{
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MMMM"];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setMonth:month];

NSDate *yearDate = [gregorian dateFromComponents:comps];
NSString *miesiacName=[dateFormat stringFromDate:yearDate];

[comps release];
[gregorian release];
[dateFormat release];

return [miesiacName autorelease];
}
@end

Wywołanie obiektu i metody w naszej aplikacji:

Kalendarz *newKalendarz=[[Kalendarz alloc] init];
NSDictionary *rokMiesiacDzien=[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:miesiac+1] forKey:@"month"];
NSString *miesiacName=[[NSString alloc] initWithString:[[newKalendarz jakiMiesiac:rokMiesiacDzien] retain]];

...............

[newKalendarz release];
[miesiacName release]; // zwalniamy oczywiście dopiero po przekazaniu obiektu do miejsca gdzie będzie wyświetlany.


Comments are closed.