UITableView を配置すると、上部に謎の空白ができてしまう時の対処方法

いつの頃からか、UITableView を画面上に配置すると、謎の空白ができてしまう現象が発生。これ、見た目がすごく悪いので、解決方法がないのか色々調べたのですね。

結局のところ、StoryBoard で、UITableView の配置順を下げると解消するのですが、これが一番簡単な解決方法だと言うことが判明。adjust  scroll view insets の適用は、海藻の一番上のオブジェyくとなので、UITableView が一番上にあると意図せずこれが効いてしまうので効かないように順位を下げる、と言う長い長い説明終了。

愛宕吾国ハイキング縦走コース

脚がだいぶ仕上がってきたので、12 月にも行ったコースを走ってきました。

今日は気温が低く快晴で風も少なく走りやすい。R1 フーディの上にウインドブレーカーで丁度良い感じ。R1 フーディは走っている間とても快適でした。満点です。

岩間駅から 0740 に走り始めて福原駅に着いたのが 1025 だったので、3 時間を切ってゴール。相変わらず登りがきつすぎで走るのが困難。コースは 12 月に走ったのを随分覚えていて、地図なしでいけました。

次に行く時に備えて、2 つほど。1 つは、初めの展望台への登り斜面は、ぬかるんでいて滑りやすい。これは 12 月もそうだったのだけれど、ここのところ雨も降っていないと思うのになぜかぬるぬるで、転びそうになりました。「切り通し」(高尾山では「巻道」と言うが・・・)の矢印はないけれども、回り込んで走ったほうが安全か。

2 つ目は、吾国山を下山して、一般道に出て、前回 lost してしまったところ、今回は矢印を見落としませんでした。歩道を走っていると、つい、そのまま行ってしまいますが、左に矢印があり、車道を横切って曲がります。丁度カーブのところなので、何となく行ってみたい感じの道だから、次回はもう見落とさないだろう。

今回、タイムは良かったんですが、駅に着いたら、丁度、5 分前に電車が行ってしまい、30 分ほど待つことに・・・待っている間、汗を吸っている R1 は寒かったですね。

前回は宍戸駅前の踏切が工事中で遠回りして「いこいの家はなさと」に行ったのですが、今回は工事も終わっていて、普通にいけました。1.8km ほどなので、クールダウンには丁度よい距離でしょう。はなさとの食堂は美味しいものが多いと思いました。今回はカリカリたこ焼き食べました。お土産に買った「吉原殿中」というお菓子は甘すぎず、しつこくなく、すごく美味しかったです。

 

info.plist と NSUserDefaults

アプリ内のちょっとしたデータを保存するのに、CoreData に保存するほどでもないんだよなーということがあって、具体的には、観察地を入力する時のデフォルト地点を、前回の場所にしておきたかったんですね、毎回場所を変えてバードウオッチングする人は稀で、普段はホームグラウンドとしている地点を探鳥し、たまに遠征するだろう、自分みたいにと思って。

そんな時、NSUserDefault を使うとすごく便利なんですが、info.plist に思い違いをしていて、軽くハマりました。値の取り出しまではすんなり、というか、久しぶりだったので、こんなにめんどくさかったんだと思いながら作っていましたが、さて、値を更新しようとして、やり方がさっぱりわからず・・・それもそのはずで、初期値の設定は手動で、読み出しのみというのが info.plist の役割なので、更新できたら逆に困るというもの。

以前買った古い本を引っ張り出してきて、あ、NSUserDefault だったとようやく気付いた次第です。

info.plist ですが、使いにくいことの一つに、値を取り出す時に指定する key が見えているまんまなのか、接頭語を付けるのかわからない点があります。

Xcode で、info.plist を選んで、右クリックすると、コンテキストメニューには Show Raw Key/Value というメニューが見えるので、それを選ぶとプログラミング時に指定する実際の key が見えます。大抵、頭に CFBundle などの文字を付けてやることになりますが、知らないと、指定がうまくいかずハマりが深くなるので、知っていると便利ですね。

なお、info.plist に開発者が key を追加した場合、プログラムで指定する key は接頭語を必要とせず、マンマで大丈夫です。でも、付けようとする名前が予約されていると混乱の元になりますから、my とか、oreore とか、何らかの自分を主張する接頭語を自身でつけてやるのが良いんでしょうね。

 

 

CloudKit Storage

アプリ利用者のデータを統合すると集合知的な利用方法ができる。

今構築中の野鳥観察記録(Field Note)では、例えば有名な探鳥地に行くとして、遭遇できるであろう野鳥の種別とその期待値を出したり、日本各地における渡り鳥の初認日から、自宅周辺での初認日を予想したりと、ふだんの bird watching life が充実すること間違いない。

アプリ利用者のデータを集めるにはどうすればいいのかよく分からなかったで、mobile backend とかを色々調べたりしていたのだけれど、結局どれが生き残るかよく分からない混沌とした状況で、決め手にかけるなぁというのが正直なところ。

そんな中、CloudKit Storage というのが、Apple 謹製であったので、びっくりこきました、ってか、知ってる人からすると、そんなことも知らないの、ぷっっ 状態。

ちょっと色々調べてみることにしよう。

CoreData relations は valueForKey でも指定できる

CoreData で many to many を指定。あるレコードに関連づけられた N のレコード数は一体どうやって取り出すのだ?と疑問が生じました。一覧の画面で、detail に登録した野鳥の数だけ表示したいと思ったんです。

ダメ元で、relations で規定した文字を指定してみました。

    NSMutableArray* many_records = [object valueForKey:@"toWildBird"];

    cell.numberOfObserve.text = [NSString stringWithFormat:@"Wild Bird (s): %ld", [many_records count]];

 

なんのエラーにもならず、ちゃんと動くのですね。

分かってくると、やっぱり CoreData は便利だなと実感しました。

CoreData many to many における、many の検索

CoreData を使い、野鳥観察記録帳のデータを管理。観察記録テーブルと野鳥一覧を many to many で連結。RDB の場合、

(1) 野鳥観察記録ー(N )観察した野鳥ー(1) 野鳥一覧

のように、テーブルを定義しますが、CoreData では many to many という指定ができるので、トランザクションテーブルである、観察した野鳥は作らなくていよい。あー便利・便利。

と、ここまでは良かったんだけど、野鳥観察記録一覧から、観察した野鳥の名前で検索するにはどうすればよいのか。つまり、あの珍しいジョウビを観察したのはどこだっけ?となってしまった場合、「ジョウビ」と入力したら、ジョウビタキが観察された記録を探して欲しいということ。

いろいろ調べたところ、SUBQUERY と ANY という指定ができるようで、

        NSPredicate* predicate =

         [NSPredicate predicateWithFormat:

          @"location CONTAINS[c] %@ OR (ANY toWildBird.jname CONTAINS[c] %@)",

          incSearchText, incSearchText];

 

こんな書き方が可能。ANY で指定している、toWildBird.jname 部分は、Relationship で定義した名前と N 側のフィールド名になる。Relationship 名の代わりにテーブルの名前にしてしまうとエラー発生(key path error)なので、すぐわかる。

many to many の指定は、RDB に慣れているとそんな指定はできないので初めよく分からなかったんだけど、追加、削除、検索がすごく簡単にできるので、理解できると、とても便利ですね。

 

フォアフット

フォアフットで走ると速く走れる(らしい)と聞いて、実践中。

初めは全然できなかったのだけど、階段を降りる時のように、着地する側の骨盤を下げ、逆に言うと、軸足の骨盤を上げることで着地しやすくなった。

問題はふくらはぎで、初めは疲労感と痛みで 10Km 走れず、体に悪いのではないかと思えたほどですが、3 ヶ月ぐらいでようやく 25Km ぐらいは走れるようになった。未だに、疲労するけど。

フォアフットの利点は未だによく分からない。明らかに違うのが、太ももの前面が全然痛くならないのと、明らかに太ももの裏側の筋肉を使って走っている。そのせいで、今までと比較すると、疲労感は少なく感じる。本などによく書いてある太ももの裏の筋肉を使った走りはどうやるのか疑問だったのだけど、こういうことかと、ようやくわかった。ま、ふくらはぎ疲労とのトレードオフなんだけれども・・・

太ももの前面とふくらはぎの疲労を比較すると、ふくらはぎの方が回復が早い気がするので、それはいいかも。

膝が痛くならないというのもよく見かけるのだけれど、初めから痛くなかったんでここはどうってことがないのだけれど、走った後に膝使ったなぁという感じは確かにしない。

今よく分からないのが、スピードを上げてフォアフットすると以前よりもかなりぎこちない感じ。短距離の走りならフォアフットでできるのだけれど、長距離のスピード走の時のフォームがしっくりこないし、実際速く走れていない感じがする。

また練習してみよう。