2015年3月4日水曜日

[iOS開発] Could not load the “image.png” image referenced from a nib in the bundle with identifier “”

今日はタイトルにあるとおり、
エラー「Could not load the “” image referenced from a nib in the bundle with identifier “com.bundle.identifier”」にハマったこと、でござる。


ちなみにエラーメッセージとしては、""っていう画像イメージがありませんよ?という内容だ。
でも、おかしい。画像の名前が書いていないのだ。わかるはずがない。とりあえず、エラーが出ているページの画像を総て削除しても、メッセージが表示されたまま。

いろいろ調べてみる。
画像を保存しなおすとか、storyboardのソースを確認しろとかいう情報が見つかるのでどちらもやってみる。
・画像を保存してみる
→変わらず。というかこの方法、画像ファイル名が記載がある場合の対処の様子。"" っていう画像ってファイルはないのだから対応できないのは当たり前か。

・storyboard のソースを確認する。
→ image という名前で検索してみるが、得に問題はなさそう。


途方にくれたので、各image をクリックしていったら、
なんと、image の画像ファイルが記載されている箇所が [undefined]と表示が!
これを直してあげたら、エラーがなくなった。
こんなのわかんないわー。
だって[undefined]とあるのに、storyboard 上はしれっと、問題がないようにプレビュー表示してましたから。

みなさんも、こんな時があったら、画像ファイルのソースを確認してみてください。

※ソースっていうのは、この箇所のimage の部分。undefined と記載があったのですが、バグが出た時の画像はキャプチャできず。。



ではでは。

2015年2月21日土曜日

mac : Magic Mouseと充電




タイトルにもあるんだけど、今回はマジックマウス。
かっこいいんですよねぇ

WindowsPCを使っていたころから、Macのマジックマウスに憧れていました。
あのツルツル、ピカピカで、それ以外に何もないのが堪りません。
嫁は冷ややかな目で見ていましたが。

んで、早速購入。ついでにこれも買っちゃいました!
知ってる人は知ってる、マウスパッドとそのソール。
これを使うとマウスがホッケーゲームぐらいに滑るように動きます!
絶対お勧め。


  

やはりイイ!

電池が切れるのが早い。こまめにスイッチをOFFにしないと2週間ぐらいで切れちゃいます。

充電池もいいけど何かないかな?と思ったらこんなのがあるじゃないですか!




マウスをのせるだけで充電ができるワイヤレス充電池!
これでバッチリ!

後日談 充電されない?

このワイヤレス充電池、かっこいいんだけど・・・
充電できなくなってしまいました。。
まだ買って半年も経っていないのに・・。

どうやらwebを検索しても、同様の人が多数。

充電池の接点やUSB端子の接触が悪いらしく、それで充電できない模様。
接点復活剤をつけると、文字どおり復活!

必要なときに充電切れ・・・なんてないように充電池も追加で買いました!



2015年2月14日土曜日

[iOS開発] uitableview セクション単位・行単位のアニメーション


uitableviewのアニメーションについて以下整理。

[uitableview reloaddata]はセルの追加、更新、削除を行ったときにセルの内容を任意のタイミングでリフレッシュさせることができるので便利。
だが、アニメーションが動作しないという副作用がある。

その1. UIViewのアニメーションを使う。次のようにbeginupdate - endupdates で挟み込むように処理を記述すればアニメーションが動作する。

[tableview beginupdates]
行の追加処理
[tableview endupdates]

その2.セクション単位・行単位で更新する。次のメソッドを使えば更新+アニメーション動作ができる。もちろん、セクションもしくは行の単位でアニメーションさせられるので、覚えていて損はない。


-reloadSections 

[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:セクション番号] withRowAnimation:UITableViewRowAnimationNone];


-reloadRowsAtIndexPaths

NSIndexPath* indexPath = [NSIndexPath indexPathForRow:行番号 inSection:セクション番号];
[self.tableview reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];


アニメーションの挙動(オプションのパラメータ)についてはこちらのブログが詳しい。
http://alginplus.blogspot.jp/2013/07/uitableviewcell-sample.html







2015年2月12日木曜日

mac のスクリーンショットの取り方

mac のスクリーンショットの取り方を忘れてしまうので備忘録。

画面全体のスクリーンショットを撮る

「command (⌘) + shift + 3」キーを押します。スクリーンショットがデスクトップに追加されます。

アクティブ画面のスナップショット。
「command (⌘) + shift + 4」キー その後にスペースでアクティブ画面のスナップショット。 

画面の一部のスクリーンショットを撮る
「command (⌘) + shift + 4」キーを押して、十字ポインタをドラッグして領域を選択します。「shift」「option」または「space」バーを押しながらドラッグして、選択した領域のサイズを変更します。

取り消すには、マウスボタンを放す前に「escape (esc)」キーを押します。

2014年12月25日木曜日

[iOS開発] Automatic Preferred Max Layout ...

ラベルを二行や三行で表示させようと、プロパティを設定すると次の警告が出る。


Automatic Preferred Max Layout Width is not available on iOS versions prior 8.0


たとえばこんな感じに二行設定してあるとして・・・。




ちょっと裏技的な対応になってしまうが、
StoryBoard のソースを直接修正(右クリック)すると、カンタンに対応できる。




該当ラベルに次のプロパティを追加するだけ。

preferredMaxLayoutWidth=0

StoryBoardを修正するときに、
何か消してしまったりすると修正が大変なので、バックアップはちゃんと取るようにしましょう。

追加した後に再度Interface Builder 開き直せば、警告は消えているはず!


http://stackoverflow.com/questions/25398312/automatic-preferred-max-layout-width-is-not-available-on-ios-versions-prior-to-8


追加:
見つけるには numberOfLines="0"としているラベルを手掛かりにすると簡単ですよ。




ではでは

2014年12月19日金曜日

iOS 開発 シミュレータを日本語環境で起動させる

よく忘れるので、備忘録。

Xcode6 からシミュレータを実行させる際に言語を指定することができる。

実行時のパラメータはこれ。
-AppleLanguages (ja)

設定箇所は
[Product]->[Scheme]->[Edit Scheme]で設定ページを開く
左側ペインのRunを選択、右に表示される Argument Pass On Launch で設定。



2014年12月17日水曜日

iOS開発 Presenting view controllers on detached view controllers is discouraged

タブをプログラムから切り替えるコードを作っていたら、

こんな警告が

「Presenting view controllers on detached view controllers is discouraged」


self.tabBarController の中にさらに navigationControllerがあるんで、
次のようなコードを書いてた。


// タブの選択を変更
self.tabBarController.selectedIndex = 0;

// セグエで遷移
[self.navigationController.viewControllers[0] performSegueWithIdentifier:@“xxxx" sender:nil];


どうも、セグエで遷移するときに落ちる模様。
self.tabBarController の中にさらに navigationControllerがあるのに、
そこからタブを飛び越えてセグエで無理矢理遷移するのが原因か?
ビューコントローラーで選択できるようなので、次のように変更、無事動作。

UINavigationController *vc = self.tabBarController.viewControllers[0];
self.tabBarController.selectedViewController = vc;
[vc popToRootViewControllerAnimated:YES];

リンク先を参考にさせていただいた。