クロックに独自クラスを導入する(5)

2010. 06. 06
●ラベルの接続

Interface Builderでラベルの接続を行います。

最初にClockクラスのオブジェクトをInterface Builderに登録します。

LibraryウィンドウからObjectを、Documentウィンドウに2つドラッグ&ドロップします。

Documentウィンドウで追加したObjectを選択した状態で、InspectorウィンドウのIdentityパネルを開き、2つともClass IdentityのClassをClockに指定します。

381

Interface Builder IdentityのName、またはDocumentウィンドウの直接編集で名前を『Japan Clock』と『Cupertino Clock』に設定します。

380

Documentウィンドウで、作成したClockクラスのオブジェクトを右クリックしてConnectパネルを開きます。

383

384

OutletsのラベルはConnectパネルから、Viewウィンドウの対応する日付/時刻ラベルに接続します。

それとReferencing OutletsはConnectパネルからDocumentウィンドウのClock App Delegateに繋ぎ、clockおよびclockPtを選択します。

接続が済んだら保存してXcodeに戻ります。


●ソースファイルの編集

残りはClock.mとClockAppDelegate.mの編集です。

Clock.mの内容は、『クロックに独自クラスを導入する(2)』と『クロックに独自クラスを導入する(3)』、ロケールについては『クロックでロケールを指定する』を参照してください。
(太字が追加した部分)

#import "Clock.h"

@implementation Clock

- (id)init {
    // スーパークラスによる初期化
    self = [super init];

    if (self != nil) {
        // timerの生成
        timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateClock:) userInfo:nil repeats:YES];

        // timerZoneの生成
        timeZone = [[NSTimeZone systemTimeZone] retain];
    }
    // 初期化したインスタンスを返す
    return(self);
}

- (id)initWithTimeZone:(NSTimeZone *)zone {
    // スーパークラスによる初期化
    self = [super init];

    if (self != nil) {
        // timerの生成
        timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateClock:) userInfo:nil repeats:YES];

        // timerZoneは引数を保持したものを代入
        timeZone = [zone retain];
    }
    // 初期化したインスタンスを返す
    return(self);
}

+ (id)clockWithTimeZone:(NSTimeZone *)zone {
    // インスタンスの生成と初期化と自動破棄
    return([[[self alloc] initWithTimeZone:zone] autorelease]);
}

// プロパティの実装
@synthesize timeZone;

- (void)updateClock:(NSTimer *)theTimer {
    NSDate *date = [NSDate date];
    NSDateFormatter *form = [[NSDateFormatter alloc] init];

    // ロケール情報を生成(英語(イギリス)を指定)
    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];

    // NSDateFormatterにロケール情報をセット
    [form setLocale:locale];

    // タイムゾーンの指定
    [form setTimeZone:timeZone];

    // 日付の表示
    [form setDateStyle:NSDateFormatterFullStyle];
    [form setTimeStyle:NSDateFormatterNoStyle];
    labelDate.text = [form stringFromDate:date];

    // 時刻の表示
    [form setDateStyle:NSDateFormatterNoStyle];
    [form setTimeStyle:NSDateFormatterFullStyle];
    labelTime.text = [form stringFromDate:date];

    [form release];
    [locale release];
}

- (void)dealloc {
    // タイマーとタイムゾーンを破棄
    [timer release];
    [timeZone release];
    // 残りの部分はスーパークラスで破棄
    [super dealloc];
}
 

@end

385

ClockAppDelegate.mでは、2つのアウトレットのタイムゾーンを指定します。

画面上部は日本、画面下部はクパティーノ(ロサンゼルス)を略字で指定しています。
(太字が追加した部分)

#import "ClockAppDelegate.h"

@implementation ClockAppDelegate

@synthesize window;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Override point for customization after application launch
    clock.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"JST"];
    clockPt.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"PDT"];

    [window makeKeyAndVisible];

    return YES;
}

- (void)dealloc {
    [window release];
    [super dealloc];
}

@end

386


・timeZoneWithAbbreviation:
(NSTimeZoneクラス)

+ (id)timeZoneWithAbbreviation:(NSString *)abbreviation

指定した略字を識別したタイムゾーンオブジェクトを返します。

abbreviationで指定した略字の名前はabbreviation dictionary(略字辞書)を使って識別し、タイムゾーンの名前をタイムゾーンオブジェクトとして返します。

abbreviationで指定した名前が辞書に無い場合はnilを返します。

一般的には、『UTC』や『GMT』など固有の略字以外は使用を推奨しません。

タイムゾーンの略字は標準ではなく、指定した略字が複数該当する場合もあります。

例えば『EST』は東部時間を意味しますが、米国とオーストラリアの両方が該当します。

abbreviation:タイムゾーンの略字を指定します


上記のように使用できる略字は限定されていますが、それを調べるにはabbreviationDictionaryメソッドを使います。


・abbreviationDictionary
(NSTimeZoneクラス)

+ (NSDictionary *)abbreviationDictionary

タイムゾーンの名前と略字をマッピングしている辞書を返します。

複数のタイムゾーンが同じ略語を持つ場合があります。

例えば、US/PacificとCanada/Pacificの略字は『PST』になります。

この場合、abbreviationDictionaryは指定した略字に対して一つのタイムゾーンを返します。


また略字で該当しないタイムゾーンはtimeZoneWithName:メソッドで名前を指定する必要があります。

使用可能なタイムゾーン名はknownTimeZoneNamesで調べることができます。

iPhone Simulator(3.1.3)でのabbreviationDictionaryおよびknownTimeZoneNamesの実行結果を下表にまとめました。
(ブログの字数制限の都合上、2つに分割されています)

タイムゾーン地域名地域名
略語
夏時間
+14キリバス (キリティマティ)Pacific/Kiritimati-
+13キリバス (エンダベリー)Pacific/Enderbury-
トンガPacific/Tongatapu-
+12:45ニュージーランド (チャタム)Pacific/Chatham
+12南極大陸 (マクムード)Antarctica/McMurdo
南極大陸 (南極点)Antarctica/South_Pole
ロシア (アナジル)Asia/Anadyr
ロシア (カムチャッカ)Asia/Kamchatka
ニュージーランド (太平洋/オークランド)Pacific/Auckland
NZST/NZDT
フィジーPacific/Fiji-
ツバルPacific/Funafuti-
マーシャル諸島共和国 (クワジェリン)Pacific/Kwajalein-
マーシャル諸島共和国 (マジュロ)Pacific/Majuro-
ナウルPacific/Nauru-
キリバス (タラワ)Pacific/Tarawa-
米領太平洋諸島 (ウェーク)Pacific/Wake-
ウォリス・フツナPacific/Wallis-
+11:30ノーフォーク島Pacific/Norfolk-
+11南極大陸 (ケーシー)Antarctica/Casey-
ロシア (マガダン)Asia/Magadan
バヌアツPacific/Efate-
ソロモン諸島Pacific/Guadalcanal-
ミクロネシア (コシャエ)Pacific/Kosrae-
ニューカレドニアPacific/Noumea-
ミクロネシア (ポナペ)Pacific/Ponape-
+10:30オーストラリア (ロードハウ)Australia/Lord_Howe
+10南極大陸 (デュモン デュルビル)Antarctica/DumontDUrville-
ロシア (サハリン)Asia/Sakhalin
ロシア (ウラジオストク)Asia/Vladivostok
オーストラリア (ブリスベン)Australia/Brisbane-
オーストラリア (カリー)Australia/Currie
オーストラリア (ホバート)Australia/Hobart
オーストラリア (リンデマン)Australia/Lindeman-
オーストラリア (メルボルン)Australia/Melbourne
オーストラリア (シドニー)Australia/Sydney
グアムPacific/Guam-
パプアニューギニアPacific/Port_Moresby-
北マリアナ諸島Pacific/Saipan-
ミクロネシア (トラック)Pacific/Truk-
+9:30オーストラリア (アデレード)Australia/Adelaide
オーストラリア (ブロークンヒル)Australia/Broken_Hill
オーストラリア (ダーウィン)Australia/Darwin-
+9東ティモールAsia/Dili-
インドネシア (ジャヤプラ)Asia/Jayapura-
朝鮮民主主義人民共和国Asia/Pyongyang-
大韓民国Asia/Seoul
KST
-
JSTAsia/Tokyo
JST
-
ロシア (ヤクーツク)Asia/Yakutsk
パラオPacific/Palau-
+8:45オーストラリア (ユークラ)Australia/Eucla-
+8ブルネイAsia/Brunei-
モンゴル (チョイバルサン)Asia/Choibalsan-
中国 (重慶)Asia/Chongqing-
中国 (ハルビン)Asia/Harbin-
中華人民共和国香港特別行政区Asia/Hong_Kong
HKT
-
ロシア (イルクーツク)Asia/Irkutsk
中国 (カシガル)Asia/Kashgar-
マレーシア (アジア/クアラルンプール)Asia/Kuala_Lumpur-
マレーシア (クチン)Asia/Kuching-
中華人民共和国マカオ特別行政区Asia/Macau-
インドネシア (マカッサル)Asia/Makassar-
フィリピンAsia/Manila
PHT
-
中国 (上海)Asia/Shanghai-
シンガポールAsia/Singapore
SGT
-
台湾Asia/Taipei-
モンゴル (ウランバートル)Asia/Ulaanbaatar-
中国 (ウルムチ)Asia/Urumqi-
オーストラリア (パース)Australia/Perth-
+7タイAsia/Bangkok
ICT
-
ベトナムAsia/Ho_Chi_Minh-
モンゴル (ホブド)Asia/Hovd-
インドネシア (ジャカルタ)Asia/Jakarta
WIT
-
ロシア (クラスノヤルスク)Asia/Krasnoyarsk
カンボジアAsia/Phnom_Penh-
インドネシア (ポンティアナク)Asia/Pontianak-
ラオスAsia/Vientiane-
クリスマス島Indian/Christmas-
+6:30ミャンマーAsia/Rangoon-
ココス (キーリング) 諸島Indian/Cocos-
+6南極大陸 (ボストーク)Antarctica/Vostok-
カザフスタン (アルマトイ)Asia/Almaty-
キルギスタンAsia/Bishkek-
バングラデシュAsia/Dhaka
BDT
GMT+00:00Asia/Novokuznetsk
ロシア (ノボシビルスク)Asia/Novosibirsk
ロシア (オムスク)Asia/Omsk
カザフスタン (キジルオルダ)Asia/Qyzylorda-
ブータンAsia/Thimphu-
英領インド洋植民地Indian/Chagos-
+5:45ネパールAsia/Kathmandu-
+5:30スリランカAsia/Colombo-
インドAsia/Kolkata
IST
-
+5南極大陸 (デービス)Antarctica/Davis-
南極大陸 (モーソン)Antarctica/Mawson-
カザフスタン (アクタウ)Asia/Aqtau-
カザフスタン (アクトベ)Asia/Aqtobe-
トルクメニスタンAsia/Ashgabat-
タジキスタンAsia/Dushanbe-
パキスタンAsia/Karachi
PKT
カザフスタン (オラル)Asia/Oral-
ウズベキスタン (サマルカンド)Asia/Samarkand-
ウズベキスタン (アジア/タシケント)Asia/Tashkent-
ロシア (エカテリンブルグ)Asia/Yekaterinburg
フランス領極南諸島Indian/Kerguelen-
モルジブIndian/Maldives-
+4:30アフガニスタンAsia/Kabul-
+4アゼルバイジャンAsia/Baku
アラブ首長国連邦Asia/Dubai
GST
-
オマーンAsia/Muscat-
グルジアAsia/Tbilisi-
アルメニアAsia/Yerevan
ロシア (サマラ)Europe/Samara
セーシェルIndian/Mahe-
モーリシャスIndian/Mauritius-
レユニオン島Indian/Reunion-
+3:30イランAsia/Tehran
IRST
+3エチオピアAfrica/Addis_Ababa
EAT
-
エリトリアAfrica/Asmara-
タンザニアAfrica/Dar_es_Salaam-
ジブチAfrica/Djibouti-
ウガンダAfrica/Kampala-
スーダンAfrica/Khartoum-
ソマリアAfrica/Mogadishu-
ケニアAfrica/Nairobi-
南極大陸 (昭和基地)Antarctica/Syowa-
イエメンAsia/Aden-
イラクAsia/Baghdad-
バーレーンAsia/Bahrain-
クウェートAsia/Kuwait-
カタールAsia/Qatar-
サウジアラビアAsia/Riyadh-
ロシア (モスクワ)Europe/Moscow
MSK/MSD
ロシア (ボルゴグラード)Europe/Volgograd
マダガスカルIndian/Antananarivo-
コモロIndian/Comoro-
マヨット島Indian/Mayotte-
+2マラウィAfrica/Blantyre-
ブルンジAfrica/Bujumbura-
エジプトAfrica/Cairo
ボツワナAfrica/Gaborone-
ジンバブエAfrica/Harare
CAT
-
南アフリカAfrica/Johannesburg-
ルワンダAfrica/Kigali-
コンゴ民主共和国 (キンシャサ) (ルブンバシ)Africa/Lubumbashi-
ザンビアAfrica/Lusaka-
モザンビークAfrica/Maputo-
レソトAfrica/Maseru-
スワジランドAfrica/Mbabane-
リビアAfrica/Tripoli-
ヨルダンAsia/Amman
レバノンAsia/Beirut
シリアAsia/Damascus
パレスチナ領土Asia/Gaza
イスラエルAsia/Jerusalem
キプロスAsia/Nicosia
ギリシャEurope/Athens
ルーマニアEurope/Bucharest
モルドバEurope/Chisinau
フィンランドEurope/Helsinki
トルコEurope/Istanbul
EET/EEST
ロシア (カリーニングラード)Europe/Kaliningrad
ウクライナ (キエフ)Europe/Kiev
オーランド諸島Europe/Mariehamn
ベラルーシEurope/Minsk
ラトビアEurope/Riga
ウクライナ (シンフェローポリ)Europe/Simferopol
ブルガリアEurope/Sofia
エストニアEurope/Tallinn
ウクライナ (ウジゴロド)Europe/Uzhgorod
リトアニアEurope/Vilnius
ウクライナ (ザポロージェ)Europe/Zaporozhye
+1アルジェリアAfrica/Algiers-
中央アフリカ共和国Africa/Bangui-
コンゴ共和国 (ブラザビル)Africa/Brazzaville-
スペイン (セウタ)Africa/Ceuta
カメルーンAfrica/Douala-
コンゴ民主共和国 (キンシャサ) (キンシャサ)Africa/Kinshasa-
ナイジェリアAfrica/Lagos
WAT
-
ガボンAfrica/Libreville-
アンゴラAfrica/Luanda-
赤道ギニアAfrica/Malabo-
チャドAfrica/Ndjamena-
ニジェールAfrica/Niamey-
ベニンAfrica/Porto-Novo-
チュニジアAfrica/Tunis
ナミビアAfrica/Windhoek
スバールバル諸島・ヤンマイエン島Arctic/Longyearbyen
オランダEurope/Amsterdam
アンドラEurope/Andorra
セルビアEurope/Belgrade
ドイツEurope/Berlin
スロバキアEurope/Bratislava
ベルギーEurope/Brussels
ハンガリーEurope/Budapest
デンマークEurope/Copenhagen
ジブラルタルEurope/Gibraltar
スロベニアEurope/Ljubljana
ルクセンブルグEurope/Luxembourg
スペイン (ヨーロッパ/マドリード)Europe/Madrid
マルタEurope/Malta
モナコEurope/Monaco
ノルウェーEurope/Oslo
フランスEurope/Paris
CET/CEST
モンテネグロEurope/Podgorica
チェコ共和国Europe/Prague
イタリアEurope/Rome
サンマリノEurope/San_Marino
ボスニア・ヘルツェゴビナEurope/Sarajevo
マケドニアEurope/Skopje
スウェーデンEurope/Stockholm
アルバニアEurope/Tirane
リヒテンシュタインEurope/Vaduz
バチカン市国Europe/Vatican
オーストリアEurope/Vienna
ポーランドEurope/Warsaw
クロアチアEurope/Zagreb
スイスEurope/Zurich



参考文献

NSTimeZone Class Reference

Date and Time Programming Guide

Wikipedia/標準時

Wikipedia/グリニッジ標準時

Wikipedia/協定世界時

Wikipedia/ロシア時間

World Time Clock & Map

基礎からのiOS SDK基礎からのiOS SDK
(2010/10/09)
鶴薗 賢吾、松浦 健一郎 他

商品詳細を見る

詳解 Objective-C 2.0 第3版詳解 Objective-C 2.0 第3版
(2011/12/28)
荻原 剛志

商品詳細を見る






Bose SoundLink around-ear wireless headphones II
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
06 | 2017/07 | 08
Sun Mon Tue Wed Thu Fri Sat
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

Bose SoundLink around-ear wireless headphones II
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR