2016-11-15 11 views
0

私のプロジェクトでは。私は自分のプロジェクトでユーザーの変更をカレンダーにしたい。ユーザーが日本語カレンダーを選択した場合、日付はプロジェクトで日本語カレンダー形式で表示されます。ユーザーがグレゴリオ暦を選択した場合、日付はグレゴリオ暦の形式で表示されます。だから私は以下のようにクラスファイルを使用しました。ここでNSCalendar currentCalendarが動作しません

はここmyclass.h

#import <Foundation/Foundation.h> 

@interface util : NSObject 

+ (NSString *)getTrimedString:(NSString *)str; 

+(NSDate*)convertStringToDate:(NSString*)baseString; 
+(NSString*)dateToYMD:(NSDate*)date; 
+(NSString*)dateToMDHM:(NSDate*)date; 
+(NSString*)dateToYMDHM:(NSDate*)date; 

+(NSString*)dateToHM:(NSDate*)date; 
+(NSString*)convertStringToMDHM:(NSString*)baseString; 

+(UILabel*)createWorkLblWord:(NSString*)baseText; 
+(UILabel*)createWorkLblWord:(NSString*)baseText widths:(NSInteger)width fontSize:(NSInteger)size; 

+(float)systemVersionFloat; 

@end 


+(NSString*)dateToYMDHM:(NSDate*)date{ 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 

myclass.m

#import "util.h" 

@implementation util 

+(NSString*)dateToYMDHM:(NSDate*)date{ 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 



NSCalendar *usercalendar = [NSCalendar currentCalendar]; 

[formatter setCalendar:usercalendar]; 

NSLog(@"Current Auto Calendar : %@",[[NSCalendar autoupdatingCurrentCalendar] calendarIdentifier]); 
NSLog(@"current calendar: %@", [[NSCalendar currentCalendar] calendarIdentifier]); 

[formatter setDateFormat:@"yyyy/MM/dd\nH:mm"]; 
    return [formatter stringFromDate:date]; 
} 

ですが、結果はグレゴリオ暦の日付形式を示しています。ユーザーが日本語カレンダーまたは仏教カレンダーを選択した場合でも、私のプロジェクトはグレゴリオ暦の日付のみを表示します。これをどうすれば解決できますか?代わりに、識別子を使用してみてください[NSCalendar currentCalendar]を使用しての

Here is NSLog Screenshot

答えて

0

は、現在のカレンダーがデフォルトに選ぶ1のためのグレゴリオ [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];

ため

仏教 `[[NSCalendarのアロケーション] initWithCalendarIdentifier:NSBuddhistCalendar];

+0

はい。はい。しかし、私たちの上司は、ユーザーの好みのカレンダーを使用したい。彼は、[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]のようにカレンダーをデフォルトに設定したくありません。 –

+0

ユーザーは設定アプリケーションでカレンダーを変更しますか? –

+0

電話機の設定でカレンダーを日本語に変更します。私たちのアプリでは、[NSCalendar currentCalendar]を使って電話機の設定カレンダーを呼び出しました。しかし、日付形式はグレゴリオ暦の形式しか表示しません。 例:携帯電話の設定でカレンダーを日本語に設定します。アプリ内の日付は0028/11/15と表示されます。もう1つの例:私は電話の設定でグレゴリオ暦を選択します。アプリ内の日付は2016/11/15と表示されます。 –

0

currentCalendar現在のロケールからのカレンダーです。そのユーザーは電話の設定を変更できます。
ユーザーがアプリケーション内のカレンダーを変更できるようにする場合。 calendarWithIdentifierメソッドで必要なカレンダーを作成してください。
NSCurrentLocaleDidChangeNotificationに登録してUIを更新することもできます。

ここですべてのコード:

@interface ViewController() 

- (IBAction)printCurrentCalendar:(id)sender; 
- (void)localeChangedNotification:(NSNotification*)notification; 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(localeChangedNotification:) name:NSCurrentLocaleDidChangeNotification object:nil]; 
} 


- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 


#pragma mark Actions 
- (IBAction)printCurrentCalendar:(id)sender 
{ 
    NSCalendar* calendar = [NSCalendar currentCalendar]; 
    NSLog(@"calendar from currentCalendar: %@", calendar.calendarIdentifier); 

    NSCalendar* localeCalendar = [NSCalendar calendarWithIdentifier:[NSLocale currentLocale].calendarIdentifier]; 
    NSLog(@"calendar from locale: %@", localeCalendar.calendarIdentifier); 
} 


- (void)localeChangedNotification:(NSNotification*)notification 
{ 
    NSLog(@"locale changed"); 
} 

@end 

出力:

CalendarCheck [1289:74644] currentCalendarからカレンダー:グレゴリオ CalendarCheck [1289:74644]ロケールからカレンダー:グレゴリオ
CalendarCheck [ 1289:74644]ロケールが変更されました
CalendarCheck [1289:74644] calendar from currentCalendar:japanese CalendarCheck [1289:74644] calendar from l ocale:japanese

+0

はい...はい...ユーザーが携帯電話の設定でカレンダーを変更すると、アプリの日付はユーザーの希望のカレンダーの日付として表示されます。例:私は、携帯電話の設定で日本語カレンダーを選択します。 アプリの日付は0028/11/15と表示されます。 別の例:携帯電話の設定でグレゴリオ暦を選択します。 アプリの日付は2016/11/15と表示されます。 これは、[NSCalendar currentCalendar]または[NSCalendar autoupdatingCurrentCalendar]を使用する理由です。 –

+0

この情報を確認するための小さなプログラムを作成しました。私が説明したすべての作品。 –

+0

あなたもやってみました。しかし、私のプロジェクトで何が問題なのですか?それは[NSCalendar currentCalendar]で動作しません。 しかし、他のミニプロジェクトはうまく動作します。私のプロジェクトは完全に私はしていません。 OSアップデート用にアップグレードしています。しかし、主なコーダーは日本のものです。だから私はこれのエラーを見つけることができません。 Xcodeプロジェクトでカレンダーを設定する方法はありますか? 私を助けてください。私のスケジュールの日付はとても近いです、私が終わることができない場合、私は印象が下がるでしょう。私を助けてください!!!私はあなたに謝る。 –

1

解決済みの質問はコーディングエラーではありません。スキームオプションで間違っています。私はXcode Product Menu >> Scheme >> Edit Scheme >> Optionsタブでアプリケーション領域をSystem Regionに変更しました。 Mr.Andrew Romanovは私を救った。ありがとうございますMr.Andrw Romanov

私のスキームオプションはスクリーンショットです。

enter image description here

関連する問題