Xcode6でiOS7向けにMaster-Detailアプリを作る時の注意点
Xcode6.xでMaster-Detailアプリをテンプレで作ると、iOS7では動かないソースが吐き出されます……orz
new projectの際に
Device
でUniversal
、iPad
を選んだ場合。
そもそも、おとなしくiPhone
を選んでおけばこんなに苦労することはなかったんや……。
なんであかんのじゃー、とネットを這いずり回って、ようやく答えを見つけたよ。
Ryanまじありがとう。
Stack Overflow
とかでも一応回答があったりしたんだけど、application(_:, didFinishLaunchingWithOptions)
の中身コメントアウトしろや、っていうだけだったんで、ベストアンサーはRyanで。
たぶんだけど、簡単に言うと、iOS8ではUISplitViewController
にはUINavigationController
の能力があるけど、iOS7のにはそれがないってことなのかな。
デフォルトで吐き出されるソース、iOS7がターゲットだと、application(_:, didFinishLaunchingWithOptions)
ですぐに止まるからね。
最初からiOS7除けしといてくれればいいのに。
splitViewController
がUINavigationController
にキャスト出来るか、displayModeButtonItem
を持っているか、isKindOfClass(UINavigationController)
でtrueが返ってくるかとか、なんでもいいんだけど。
コメントアウトしたりガードしたりするだけで動くんかい、と疑問に思うけど、動くんだよな。
特に、prepareForSegue
で戻るボタンの設定を次の画面に引き継がないようになると思うんだけど、実際にはきちんとDetail画面で戻るボタンを押すとMaster画面に戻ってこれる……。
storyboard上で設定できてるのか?
とりあえずRyanありがとう。
技術書を速読するXつのメソッド 増補・改訂版
以前こんな記事を書いた。
ここしばらくの読書生活を受けて、少し手直ししようと思う。
0. 理解することが大事
おそらくこの記事にたどり着いた人は、幾つかの速読本を読んで、もしかしたら実践してみたりして、そして上手くいかず、技術書を速読するための技術はないのかよ、と検索したものと推察する。
忘れてはならない、あなたは技術書を、速く読むために読んだのではなく、中身を理解し知識として蓄え、そしてそれを趣味や仕事に活かそうと考えていたことを。
決して速読することがゴールではないのだ。
1. 黙読せよ
脳内でさえ、声に出して文字を追いかけてはならない。
それは文字を追う速度を音速に落とす。
文字を追うこと、それ自体は亜光速で実行することが可能なのだ。
2. わからないものはわからないものと知れ
基本的に技術書と呼ばれるジャンルの書物は、なにがしかの科学技術について解説・説明されたものである。
この解説・説明という部分が重要で、例えばあなたにとって未知の概念について説明した文章であっても、その説明に使われている文章や用語が既知のものであれば、よほど文章自体が難解でない限り、読むだけで内容を理解できるはずだ。
ところが、未知の概念を説明する、その文章や用語まで未知のものであったなら、それはあなたにとってトートロジーでしかない。
だからと言って、読む意味がないとは決して私は思わない。
レベルが合っていない、そういう理由で読むのをやめるのは、時間が許すのなら回避すべきだ。
あなたは、未知の言葉で説明された、未知の概念を習得できるはずである。
3. 30分で読み切れ
少なくとも、その本の1回目の読書は、30分以内に読みきるべきだ。
読んだ端から理解できる内容であるならこの限りではない。
が、多くの場合、疑問を抱えながら読み進めることになると思う。
2. で述べた通り、わからないものはわからない。
その本全体で以って疑問点を補うべきだし、時間をかければかけるほど、理解していない内容は頭の中から揮発していく。
故に、最初の読書は全てを、少なくとも前書きやIndexを除いた本文全てを30分程度で読み切るべき。
なお、章ごとに全く異なる内容について論じているような本の場合は、その章全体を30分で読むことも可とする。
4. メモを取れ
あなたに問いたい。
あなたは学生時代、どのように勉強していただろうか。
予習は必ずしていた?
板書は全て書き写した?
復習はどういう点に重点を置いて行っていた?
速読の本を読んでいると、学生生活で行ってきたような読書の方法は誤りである、といったような記述を見かけるかもしれない。
確かに、読書そのものについてはそうかもしれない。
だが、我々が行おうとしていることは読書のみではない。
読書の先にある、読書を通じて知識を得、それを活かすことである。
あなたは学生時代、テスト前、板書を書き写したノートを見返して、何をしていたのだろうか。
丸暗記?
それもあるだろうがおそらく、内容を理解しようと努めていたはずだ。
疑問点を解消しようとしていたはずだ。
学校の教師というのは楽なものだ。
教科書の内容を適宜抜粋しては板書し、適当にわかりきったことを解説していればいいんだから。
学生時代、このように考えなかった人などいないだろう。
しかし、これこそが、わからない技術書を読む時に求められていることなのだ。
紙のノートでもevernoteでも、好きなものを使うといい。
本を読むこと、それ自体より先のことを求めるのであれば、メモは必須だ。
情報を得たらアウトプットすること、それが脳へのインプットの鍵だ。
5. 多読せよ
この場合の多読の意味するところは、同じ本を何度も読むことと、異なる、同じテーマについて書かれた本をいくつか読むことの双方である。
同じ本を何度も読むことで、それまで以上の理解が得られるかもしれないし、それまでは気づかなかったことに気づくかもしれないし、未知の概念を理解はできずとも道具としては使えるようになるかもしれない。
もしあなたの、前述した勉強が十分ならば、今までわからなかったこともわかるようになるかもしれない。
異なる、同じテーマについて書かれた本を読むことで、前に読んだ本では理解できなかったことが理解できるかもしれないし、そのテーマについて別の視点を持つことができるかもしれない。
門前の小僧が習わぬ経を読むことは、間違いなく機会と知識を豊かにする。
少ない情報量で深い理解を得ることも重要だが、過多とも言える情報を得て別の角度からの理解を得ることもまた重要である。
先のメモの話とも被るが、今時調べ物をするのにネットを使わない手はない。
こと技術に関しては、フリークやギークが深く広範な知識を示してくれている。
あなたはそれを、自分なりにまとめるなりして、役に立てれば良い。
あなたが読んでいるその本は、その際の有意義な羅針盤となってくれることだろう。
まとめ
これまで述べてきたことを自分が実践しようとすると、こうなる。
電車の中で適当に書籍を流し読みし、家に帰ってきたら疑問点などをまとめて調べてメモやら何やら、見える形で残し、翌日また電車の中で同じ本を読み返す。
4. メモを取れ
で用いた例えで言えば、速読はこの場合、予習に当たる。
家に帰ってからの疑問点などをまとめて調べてメモを残すことは、板書に相当する。
そして翌日の読書が復習となろう。
もうこれ、速読あんまり関係ないな、と思うかもしれないが、自分がなんのために速読しようとしているのかを考え、目的に合った行動を取ってほしい。
以上。
Xcodeェ……
うん、本当はスクショとれればよかったんだけどね。
そんな余裕なかったからね。
……仕事中のことだったしね。
数日前、仕事に追われていて、とんでもないことが起きた。
Xcodeでstoryboard上のパーツからソースコード上にctrl押しながらピロピロピロってIBOutlet置いたのよ。
変数名書いて、connectボタンをポチッとな!
ってやったらさ……。
Xcode、落ちやんの。
なんだよもー、っつって、Xcode再起動させて、もっかい同じことするやん?
Xcode、落ちやんの。
仕方がないからさ、Mac再起動するやん? で、Xcode再起動させて、もっかい同じことするやん?
Xcode、落ちやんの。
え、もうどういうことなん?
困惑しかないわあ……。
storyboardのDocument Outlineのパーツ選んで引っ張ってもダメ。
storyboardのDocument Outlineのパーツをctrl押しながらクリックして出る、黒地に白抜きのメニューからReferencing Outlets
の+からドラッグしてもダメ。
ユーティリティエリアのConnections Inspector
から引っ張ってもダメ。
ダメ、ダメ、ダメ。
なんかね、クラッシュログ見るとね、swiftコードジェネレーターが、とかゆうてんのよ。
なんのことやねん……。
なんか、何が悪いとか、メッセージ残してから逝けや。
ダイイングメッセージ残してから逝けや。
何か他に、ソースにIBOutlet
貼っ付ける方法、ないんかな、ってググってたら、ありました。
ありがとうグーグル先生!
@IBOutlet weak var hogeButton: UIButton!
- ソースファイルにコードを記述する
- パーツの置いてあるコントローラをstoryboardのDocument Outlineから選択
- ユーティリティエリアの
Connections Inspector
を選択 Outlets
の中に先ほどソースに書いたhogeButton
があるので、この+ボタンから、Interface Builder
上のパーツへ向けてドラッグ
そう、クラッシュログにちゃんとヒントはあったんです。
GUI操作でIBOutlet
のSwiftコードを生成しようとしたらクラッシュした、っつー意味だったんですね。
……まあ、それがなんでなのかはわかりませんけれども。
締め切り間際で時間のない中、1時間近く費やしましたけど、なんとかなってよかった。
もしお困りの方がいらっしゃいましたら、ぜひ一度お試しあれ。