Application windows are expected to have a root view controller at the end of application launch storyboard

「心霊写真なう」のデバッグ中、表題の以下の警告でハマりました。

Application windows are expected to have a root view controller at the end of application launch storyboard

ググると、「application:didFinishLaunchingWithOptions: で、window の RootViewController を設定して下さい」というアドバイスばかり出てきます。

しかし、設定しても警告は消えません。そもそも、他のアプリではそんなことしてないし。。何か他の原因では??とググり続けたところ、下記ページを発見しました。

超簡単!iOSでたった数行でかっこいいローディング表示 – SVProgressHUD

これは、「心霊写真なう」で使っている「SVProgressHUD」を解説したページです。注目すべきは、「SVProgressHUDを使う際の注意点」の「viewDidLoad:メソッドでSVProgressHUDしないこと!」。

内容を要約すると「viewDidLoad でSVProgressHUD を使うと表題の警告が出るよ!」となります。


……
思いっきり、viewDidLoad で SVProgressHUD を使ってたorz

ちなみに、このエラーが出る状態では、SLComposeViewController や TWTweetComposeViewController  で、Twitter の投稿画面で文字入力ができなくなってしまいます。なぜか Facebook の投稿画面では文字を入力できますが。。

 

ということで、ライブラリを使うときは思わぬ警告やエラーに出くわすことがあるので、使い方には十分気をつけましょう!

Xcode4.5 でローカライズができなくなったときの対処方法

Xcode4.4以前で「Localizable.strings」等のファイルをローカライズするときは、
File Inspector > Localization > ‘Make localized..’ ボタンをクリック後、
‘+’ ボタンをクリックして言語を追加することができました。

しかし、Xcode4.5では、’+’ボタンがありません。。

対処方法は、
PROJECT > Info > Localizations
で ‘+’ ボタンをクリックして言語を追加です。

最初は Xcode のバグかと思って焦りました^^;

cocos2dのパーティクルの設定まとめ

cocos2dのパーティクル(CCParticleSystem)を使おうと思ったのですが、ググってもあまり情報が見つからなかったので自分用のメモも兼ねてまとめてみます。

※各プロパティの最後にVarとついているプロパティは分散を意味します。

CCParticleSystem の設定(v2.0)
プロパティ名 説明
emitterMode 放出モード
Gravity:パーティクルを中心に向かって or 中心から放出
Radius:パーティクルを円形に回転
radialAccel
※Gravityモード用
パーティクルの加速度(マイナス値だと減速する)
tangentialAccel
※Gravityモード用
パーティクルの回転加速度(正:反時計回り、負:時計回り)
speed
※Gravityモード用
パーティクルの速度
startRadius
※Radiusモード用
ノードの位置からパーティクルを放出する距離
endRadius
※Radiusモード用
パーティクルが回転しながら向かっていく距離kCCParticleStartRadiusEqualToEndRadius を設定すると、円になる。
rotatePerSecond
※Radiusモード用
パーティクルが移動する方向と速さ
totalParticles パーティクルの数
duration 放出期間(秒数)
kCCParticleDurationInfinity:無限に放出

全てのパーティクルを放出&消滅したら、パーティクルノードを自動的に削除する場合は、autoRemoveOnFinishをYESに設定する(放出期間が有限の場合)

positionType 位置の種類
kCCPositionTypeGrouped:親ノードの動きに応じて移動
kCCPositionTypeFree:親ノードの動きで位置は変わらない。形状は影響を受ける
kCCPositionTypeRelative:親ノードの動きで位置は変わらない。形状も影響を受けない
position 位置
startSize 放出される時のサイズ
endSize 消える時のサイズ
angle Gravityモードの場合:パーティクルが最初に放出される方向
0は上。
Radiusモードの場合:startRadiusのどこで放出されるか
life 存続期間(秒数)
emissionRate 1秒間に放出されるパーティクルの数
startColor 放出直後の色
endColor 消える時の色
blendFunc ブレンドモード奥が深いので、ググることを奨励
texture テクスチャこんな感じで設定する。
emitter_.texture = [[CCTextureCache sharedTextureCache] addImage: @”stars-grayscale.png”];

起動時の画像ファイルをローカライズするとエラーが発生する現象の解決方法

アプリ起動時の画像ファイル(Launch Images)をローカライズしようとしたところ、
“Icon specified in the Info.plist not found under the top level app wrapper: Default.png”
というエラーが発生し、App Store へのアップロードができない状態になりました。。

【解決策】
info.plist から該当する画像ファイルの情報を削除すればエラーが発生しなくなりました。

具体例(Default.pngの場合):
Icon files(iOS 5) > Primary Icon > Icon files
にある Item のうち、”Default.png” の列を削除。

ボタンを押したらローカライズが解けた

印象派なうをアップデートするために英語版の動作確認をしていたら、”Clear”ボタンを押すと”クリア”ボタンに文字列が変わってしまう現象が見つかりました。

調べたところ、原因と対策がわかったのでメモしておきます。

原因

以下のように UIButton のローカライズをすると、ボタンを押したら文字列が xib ファイルで設定されている文字列に変わってしまいます。
clearButton.titleLabel.text = NSLocalizedString(@"Clear", @"クリア");

対策

下のようにすれば、大丈夫です。
[clearButton setTitle:NSLocalizedString(@"Clear", @"クリア") forState:UIControlStateNormal];
[clearButton setTitle:NSLocalizedString(@"Clear", @"クリア") forState:UIControlStateHighlighted];

ボタンが Disable 状態にもなるときは、さらに次を追加すれば良いです。
[clearButton setTitle:NSLocalizedString(@"Clear", @"クリア") forState:UIControlStateDisabled];