閏年の判定式(Objectiv-C if文)
自分が作りたいアプリには直接関係なさそうだけど、閏年判定の話。
「Xcode 4ではじめるObjective-Cプログラミング 改訂第2版」の中に閏年判定について書いてあって、あぁこれの判定式(パターン1)は簡単で良いと思ったので、自分であえて考えてみためんどくさいパターン(パターン2)と比較してメモ。ちょっと考えると単純で簡単そうな閏年の判定が意外と深いことが分かった。
- (void)viewDidLoadの中の[super viewDidLoad]の下に以下を記載し実行。
// 4で割り切れる → 閏年
// 100で割り切れる → 平年
// 400で割り切れる → 閏年
int year;
year = 2013;
//パターン1
if (year % 4 == 0){
if (year % 100 == 0){
if (year % 400 == 0){
NSLog(@"パターン1-1: %d年は閏年", year);
} else {
NSLog(@"パターン1-2: %d年は平年", year);
}
} else {
NSLog(@"パターン1-3: %d年は閏年", year);
}
} else {
NSLog(@"パターン1-4: %d年は平年", year);
}
//パターン2
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
NSLog(@"パターン2-1: %d年は閏年", year);
} else {
NSLog(@"パターン2-2: %d年は平年", year);
}
正しく書かれていれば、エディターエリアの右下に
パターン1-4: 2013年は平年
パターン2-2: 2013年は平年
と出るはず。13行が5行になった。
(メモ)
下の図の緑色の部分が閏年、それ以外が平年。
パターン1の場合、
・最初のifで「4で割り切れる枠」で囲って、
・2番目のifで「100で割り切れる枠」で囲って、
・3番目のifで「400で割り切れる枠」で囲って、
400で割り切れる → 3番目のif枠の内(3) → 閏年(パターン1-1)
400で割り切れない → 2番目のif枠の内で3番目のif枠の外(2) → 平年(パターン1-2)
100で割り切れない → 1番目のif枠の内で2番目のif枠の外(1) → 閏年(パターン1-3)
4で割り切れない → 1番目のif枠の外(4) → 平年(パターン1-4)
とめんどくさいしややこしい。
パターン2の場合、
・最初のifで一度に(1)と(3)を切り取って(*下の2つをORで結んでいるので、その両方が閏年。)
year % 4 == 0 && year % 100 != 0 → (1)の部分 → 閏年
year % 400 == 0 → (3)の部分 → 閏年
切り取った部分以外の部分(2)と(4) → 平年
としてる。簡単。
iOS 7 Tech Talksに申し込んでみた
11日ぶりにブログ更新。
Appleから「iOS 7 Tech Talks」っていうiOSアプリ・ゲーム開発の勉強イベントの案内メールが届いた。基本英語って書いてあってちょっとひるんだけど、翻訳がある場合があるらしいとも書いてあったので、とりあえず申し込んでみた。抽選らしい。
さて、
作ろうと思っていた画像・カメラアプリの機能がほとんど、iOS7の標準のカメラアプリで実現できることが判明して、しばらくモチベーションが下がってた。やる気がなくなってたものの、何冊か参考書を買って地味に少しは勉強中。なんとなくゲームがいいかなと思い始めた。
(買ってみた参考書)
1.Xcode 4ではじめるObjective-Cプログラミング 改訂第2版
Xcode 4ではじめるObjective-Cプログラミング 改訂第2版
- 作者: 大津真
- 出版社/メーカー: ラトルズ
- 発売日: 2013/04/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
買って良かった。Objective-Cの基礎知識が勉強できる。前に買った「絶対に挫折しない iPhoneアプリ開発「超」入門【iOS6対応版】」だと説明が簡単すぎて逆に良く分からないObjective-Cの基本的な文法が書いてある。やっぱりObjective-Cの基礎知識は必要と感じた。
2.やさしくはじめるiPhoneアプリ開発の学校
これも買って良かった。最初見た時、ちょっと簡単すぎて物足りないかなとも思ったけど、そんなことはなくてホントの初心者はこれくらい簡単なものから作るのが良いのかも。
3. iPhoneプログラミングUIKit詳解リファレンス
- 作者: 所友太,京セラコミュニケーションシステム株式会社
- 出版社/メーカー: リックテレコム
- 発売日: 2010/01/12
- メディア: 単行本
- 購入: 25人 クリック: 329回
- この商品を含むブログ (42件) を見る
iOSアプリの開発の要になるフレームワークであるUIKitに焦点を絞って詳しく説明している参考書。この本の前書きに「UIKitは、すべてのiPhoneアプリケーションのコアとなるフレームワークだ。」なんて書いてあって、そう言われると、なんとなくこれは知っておかなければと思って手を伸ばした。でも、もう少し基礎的な勉強をしてから買っても遅くなかったかも。積読中。
4.cocos2d-xによるiPhone/Androidアプリプログラミングガイド
cocos2d-xによるiPhone/Androidアプリプログラミングガイド
- 作者: 清水友晶
- 出版社/メーカー: マイナビ
- 発売日: 2013/06/18
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
なんとなくゲームの開発がしてみたいと思って、iPhoneのアプリ開発コーナーに何冊かあったゲーム開発本の中から、何冊かを見比べてあまり深く考えずに購入してしまった一冊。買ってからcocos2d-xのフレームワークはC++で開発することが分かり、「まだObjective-Cもろくに理解していないのに大丈夫か。。。」となってしまった参考書。積読中。
<>が付いたクラスの宣言部分の意味がよく分からない話
参考書とかネットとかに載ってるサンプルプログラムを読んでいて、
@interface myClass: NSObject
~
@end
みたいなシンプルなクラスの宣言はわかるけど、そうじゃない、クラス名の後に<>で色々書いてある
@interface myClass: NSObject <xxxxxDelegate>
~
@end
みたいな宣言の意味がよく分からなかった。デリゲートとかプロトコルとか。。。
調べていて、参考になったのが下記サイト。
Objective-C入門その4:クラス宣言をマスターする - サルにもできるiPhoneアプリの作り方
http://ameblo.jp/micro-garden/entry-10333214828.html
なんとなく分かったような気がする。
A valid provisioning profile matching the application's Identifier...のエラーにハマった話
2013-09-08に書いた「カメラロールを表示して選択した画像にフィルタをかける処理」の続き。
せっかく、iOS Developer Programの登録が完了したので、実機でテスト。
が、ビルド失敗。
「A valid provisioning profile matching the application's Identifier...」エラーが出る。コードに間違いがないことは何度も見なおして確認。
参考書
絶対に挫折しない iPhoneアプリ開発「超」入門【iOS6対応版】
- 作者: 高橋京介
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2012/11/30
- メディア: 単行本
- 購入: 3人 クリック: 42回
- この商品を含むブログ (17件) を見る
通り手続きをし、Provisioning Profileも正しく取得できているはず。
でも、実機にインストール出来ない。
ググっても情報が古かったり自分の状況と違う場合しか載ってない。
デベロッパープログラムのMember Centerの「Certificates, Identifiers & Profiles」の「iOS Apps」→「Identifer」→「App IDs」や「Provisioning Profile」などにもアクセスしてみるがなんとなく違う気がして何も変更せず。
で、xcodeに戻る。
結論
XcodeのWindowメニューのOrganizerを開く。
左側のナビゲーションバー?の一番上の「Provisioning Profile」を選択。
右側のスペースには(まだ)何も情報が出ていない。
画面右下のRefreshボタンを押す。
右側のスペースにProvisioning Profileの情報が出てくる。(上図)
これでRunしたら無事実機にインストールできた。