CoreData: record を追加したのに一覧画面に表示されないぞ?の場合

久しぶりに自分のプログラムを書ける。二ヶ月ぶりぐらいか?前どこでハマっていたのかわかんなくなっちゃった。とりあえず build して状況確認。ああ、そうだ、tableView で + ボタンを押しても record が追加されていない、というか、再度起動すると追加されているのですが、+ ボタンを押した直後、一覧画面にぴょこっと追加されていないぞ?というとき。

ハマりましたね・・・tab で 3 画面作っていて 1 画面だけに起こる現象なのでなんかおかしいぞと。他の画面と見比べれば良いのですが、めんどくセーと思いつつ丹念に見比べました。

結局のところ、NSFetchedResultsControllerDelegate のdelegate method を実装したらちゃんと表示されました。具体的には、以下の通り。

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller

{

    [self.tableView beginUpdates];

}

 

- (void)controller:(NSFetchedResultsController *)controller

  didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo

           atIndex:(NSUInteger)sectionIndex

     forChangeType:(NSFetchedResultsChangeType)type

{

    switch( type )

    {

        case NSFetchedResultsChangeInsert:

            [self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];

            break;

            

        case NSFetchedResultsChangeDelete:

            [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];

            break;

            

        default:

            return;

    }

}

 

 

- (void)controller:(NSFetchedResultsController *)controller

   didChangeObject:(id)anObject

       atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type

      newIndexPath:(NSIndexPath *)newIndexPath

{

    UITableView *tableView = self.tableView;

    

    switch(type) {

        case NSFetchedResultsChangeInsert:

            [tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade];

            break;

            

        case NSFetchedResultsChangeDelete:

            [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

            break;

            

        case NSFetchedResultsChangeUpdate:

            [self configureCell:[tableView cellForRowAtIndexPath:indexPath] withEvent:anObject];

            break;

            

        case NSFetchedResultsChangeMove:

            [self configureCell:[tableView cellForRowAtIndexPath:indexPath] withEvent:anObject];

            [tableView moveRowAtIndexPath:indexPath toIndexPath:newIndexPath];

            break;

    }

}

 

特に、

- (void)controller:(NSFetchedResultsController *)controller

   didChangeObject:(id)anObject

       atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type

      newIndexPath:(NSIndexPath *)newIndexPath

 

が重要で、CoreData に変更があったとき、tableView に反映するため呼ばれるのだと。よく似たその上の method は、section の反映。

やっぱり CoreData は鬼門。

Honda N One

車がまだ来ないので、レース前泊必至、しかもキャンプでは車がないと困る。近所のレンタカーを探したらオリックスが安い。店舗がなくて、どこなんだ?どう考えてもガソリンスタンドなんだけどオリックスのオの字も書いていない。少々不安ながらもネットで予約、荷物の量と搭乗者数を入れると軽で十分でしょと薦められる。確かに軽で十分の筈、でもせっかくレンタルするのでいい車乗りたいなぁ・・・色々車種を選んだけれど、結局値段が折り合わない。軽にする。当日まで車種がわからない。ワゴンRだったらいいな、乗ったことないしと思っていたら、変な顔した黄色い車が・・・N One だ。これ、顔ひどいね。最近のホンダはデザインがおかしくて、これも例に漏れずすごい変な顔。全く予想していなかった車だった。

軽はかなり久しぶりだ。昔 Jimny に乗っていたからあれ以来なので、10 年ぶりぐらいか。荷物を積んでみて、狭く見えていた車内も、後部座席を倒すと広い。下手したら寝られそうだ。あとから気づいたのだけど、後部座席は跳ね上げでスペースを取れる。こうするとちょうど背もたれでセパレートされるので荷物によっては積みやすい。ってか、返す時に気付いたので意味なしだけど。

走りはどうか。小気味よく回るエンジン、足回りはおや?柔らかいか?いやそんなことはない。固めだ。スピードを出すと固く締まる。高速での安定感は抜群だ。低速での跳ねる感じは全くなくなる。Jimny とは違う。あれはトラックに引っ張られてフラフラして大変だった。音もうるさくて会話できないくらいだったのに。最近の軽はいいね。燃費もすごい。180K 走ってメーターが一つも減っていない。一体リッター何キロ走るのだ?25K とか走るのではないか。アイドリングストップもある。なんだかすごいぞ。

一般道に入った。田舎道なので 60Km ぐらいで走る。足回りに不安がない。ハンドルもどっしりしている。これはメカが入っているな。安定感がある。一方、きついカーブは苦手のようだ。タイヤが小さいからか、曲がらない、ロールがきつい、アンダーでまくり、ハンドルを戻すと急に戻りお釣りがきそうだ。ビシッと決まらない。ってかアンダーでロールがきついのでそれを先読みしてオーバー気味にハンドルを切るとロールがすごくて怖い、あ、切りすぎた、戻す、ここで振り子になり安定感がない。コーナーでは足回りが不安だ。多分バネストロークの量が少ないんだろう。カーブ中は綺麗にトレースできない。ハンドルを戻したり切ったり忙しい。これは走り方に工夫が必要だ。アンダーでまくりなので、カーブの手前でしっかり速度を落として、頂点で踏み込むのがよいのだろう。あぁ、昔の車のハンドリングだ。そうだ、以前乗ってたマーチだ。マーチに似ている。温故知新。特徴がわかってしまえば、小気味よく回るエンジンと相まって楽しめる。アンダーなのは補強すれば随分改善しそうだ。もし、自分の車なら間違いなく足回りを補強するだろう。レンタカーのオプションでタワーバーをつけて欲しいところだ。

最近の軽は進化したものだ。これでターボが入っていれば、リッターカー並みの走りになるはず。足回りは強化しないと支えられないだろうな。2 日で 350Km ほど走った。シートがよくできている。一見チープに見えるが、座り心地は悪くない。長距離でも苦にならなかった、とは言い過ぎか。もう少しシートを後ろに下げることができるとありがたいのですが。軽かよと思ったツーリングも、軽の進化ですごく楽しめた。

奥久慈トレイル 30K 参加

奥久慈トレイル 30K に参加しました。レースが終わっての感想は、もうやめて、坂登りたくない・坂下りたくない です。

このレース、エントリーは前日の土曜日、説明会は 14 時から 1530 頃までと、前泊必至なんですね。12 時頃大子駅前に着いてしまい、近くのスーパーに夕飯の買い出しに。以前グリンビラに泊まった時にも寄ったスーパーだと思う。店舗は道の右側だったように思うのですが、左側に移った? 肉買いすぎたな。13 時からは受付済ませて、説明会に参加。長い長い、15 時すぎても終わる気配がない、30K のスタート地点、竜神大吊橋付近のキャンプ場をとっているので移動にも準備に時間がかかるから、丁度 30K の説明が始まったので聞きたかったんですが途中で退席してキャンプ場へ向かう。

レンタカーで移動。郊外なので車が空いてる。この軽自動車よく走る。竜ちゃんの湯はわかったんだけど、キャンプ場がわからない。Google Map で調べたら上だ。今度は受付がわからない。途中の食堂みたいなところか?聞いてみたら、竜ちゃんの湯で受付だと。受付済ませて設営だ。結構人が来てて、ほぼ満員の状態。場所取りにやや悩む。今思うと良い場所ではなかった。夜うるさくて眠れないのだ。テント張って風呂に入る。狭い。サウナない。ここ泊まれるみたいね。食堂ある。オートサイトは入浴券 2 枚付いてくるのはありがたい。さて炊事の準備。コメ炊いて肉焼いて、テキトーに食って、350ml 缶 3 本空けてまじ腹一杯になった。明日に備え 20 時頃寝ることに。周りがうるさい。消灯は 22 時で子供はおねむ、あぁようやく寝れると思ったら、近くのテントの大人がうるさい。0100 頃でしょうか、ようやく寝たので少しだけ眠れた。朝 0500 に起きて、なんかちょっと寒い。気温は 16 度、天気は快晴。ホトトギスがすごい鳴いてる。ってことは鶯もすごい鳴いてる。トトトの鳴き声も聞こえるからツツドリとかいるのか。

朝食食ってテントを片付けして0600 出発。寒い。30K は竜神大橋スタートなのですが、すぐ近くだ、と思ったら、しまった、竜神ダムに出てしまった。ここではない。大橋見える。すぐそこだけど車では行けない。まずい、時間がない。荷物は 0630 までに預けないとダメなんだ。すぐナビ入れたら一度山を降ってヘアピンのように右に曲がると着くらしい。着いた、着いた。急いで着替えてスタート地点についたのが 0630。荷物を預けてトイレを済ませてスタートを待つ。0700 スタート。坂を一気に下りぐるっと回ってトレイルに。渋滞がひどい、でも、坂がきついのでどうせ飛ばせない。赤岩のエイドを過ぎたら、またトレイルに。この区間はすごい。アドベンチャーレースのようだ。沢沿いを進むも岩がゴツゴツ、滑る滑る、足滑らせたがうまく着地できたと思ったら岩にすねをぶつけてしまい出血。痛い、痛すぎる。先を急ごう。外傷なので走りには影響がない。うわっ、地形がすごい。これマジ走れんのか?途中、四つん這いになりながら進んでようやく舗装路に。ところどころ舗装路がある。東金砂神社手前のエイドについた。まだ 10K しか進んでいないのに 2h もかかった。神社を過ぎてから次のエイドまでは縦走っぽく割と走れる。順調に歩を進め次のエイドにって、これも初参加だとわかんないんだよね、ペース配分が。

ここからがマジキツかった。坂が急なので全く走れない。上りがきついということは下りもきついということ。一度木の枝に掴まって下ろうとしたら滑ってしまい完全に鉄棒ぶら下がり状態になってしまった。これはやばい。腕の筋肉も悲鳴をあげている。下りでは木を使ってブレーキかってたので、だいぶ消耗してしまったようだ。足が疲れているのでグリップが効かなくなくなってきている。そして、エイドに到着。よかった。休みたかったんだ。

ここからはもう、きつい登りときつい下りしかない。感覚的には 100 回ぐらいアップダウンを繰り返す。急斜面を登る、下るの連続で全然走れない。あと 10K なのにすごい時間がかかる。途中、水を飲みながら登る。坂がきついので走りたくない。登りで休み休み登る。どこかの頂上で腰をおろして休む。途中、絶景のいいところがあり一休み。後から来た人が「ここがピークですか」わかりません、私も初出場ですから・・・でも、悲観的に考えておいたほうがいいかなと。途中何度も登りはこれで最後か?と思える場所があったが全く裏切られる。最後のピークは月居山なのだ。って、後からわかったことでレースの途中はわからない。標識に月居山と書いてあるからそこだろうと。行けども行けども月居山に着かない。どういうことだ。もう走りたくないからほとんど歩く。登りはもう嫌だ。歩きながら登ろう。ってか、これキツイよ。途中、これ月居山か?と思いきや何度も裏切られてしまう。もう坂は登りたくない。下りも足が痛くて嫌だ。下りは登るために降っているのか?と思い始めもう嫌だ、途中ほとんど歩く。エイドでは 12 時前にゴールかなできるかななんて思ったが全く甘い。

ようやく月居山に着いた。というか、城址と書いてある。月居山は少し上だが登りたくないのでパス。ここからは下り一本調子のはず、でも足が残っていない。歩く歩く。トレイルが終わった。舗装路だ。やった、あとは降るだけと思ったら、途中またトレイルで少しだけ上りがある。うわ、また上りかよ、もう登りたくない、登りたくない、登りたくない、もうやめてくれ。なんだこの地形は。レースに不向きじゃないか。幸いにも登りはすぐ終わった。あーよかった。下りながらもまた登りがあるんじゃないかとヒヤヒヤした。登りがあったら近道を探したくなる。舗装路に出た。マイクの声が聞こえる。もうゴールのはずだ。最後だけ走った。

ゴールしたら座り込んでしまった。水があったので飲んでみたら臭い。ポリ容器の匂いがきつい。まずい。飲みたくないけど飲まないと熱中症になりそうで仕方なく飲む。クソまずい水だ。このクソまずい水がレースの感想に重なる。もう、このレースは出たくない。急な登りと下りの連続でこれでもか、これでもかと続く。すごい、すごすぎる。思い起こすと去年の埼玉のレースほどではなかったか。あれはもっと時間がかかった。埼玉のは長い登り長い下りの連続、こちらは低い登り低い下りの連続(地獄)、どちらがいいか、はい、どちらも嫌です。縦走大好き。縦走中心のレースはないのか。

さて、50K の人って、さらに 30k 近く走っているはずで、完走した人は本当にすごいと思いました。

レース後の筋肉痛、一番ひどいのは上半身で途中、木でブレーキかったので腕と肩が痛い。歩いたせいか足はだいぶ楽。

App Store へのリリース

受託の仕事をしていると、ホント、いろんなことある。

まず、時間的な制約。必ず納期があるものの、想定外のことが起こるので余裕を持っていたつもりでも、いつの間にか時間が足りなくなってしまう。

今回最もハマったのが、お客様の証明書を組み込んで納品しないといけないこと。これまじきつかった・・普段は自分の証明書を組み込むだけなのでなんとでもなるのですが、お客様の証明書を組み込む手順がわかっていてもうまくいかない。結局、iOS Developer と書いてあるのを、iOS Distribution に書き換えたらうまくいった・・・こんなのどこにも書いてないのですが。自分の遭遇している問題にズバリ答えてくれる source はない、というのが身に染みた出来事でした。

次に、API を通じてサーバと情報をやり取りしているのですが、テスト段階で問題ないことがわかっていても、いざ、本番データを入れてみるとうまく接続できないことが・・・よく調べてみると、はじめの 1 record だけ認識されず、それ以外の record は問題なく接続できる。なんだこれは。原因不明。ブラウザで API の URL 直打ちでもダメだ。これには肝を冷やしてしまった。手が震えてくる。解決できず、問題の record を一回削除して、再度 insert したらうまくいった。どういう訳だ?sqlite3 の bug ではないか?

今度は同じく別の API へ接続してみたら、意図通りの動作になっていない。具体的には、期日までは disable で、期日を迎えたら enable になるはずがそうはなっていない。DB の record 確認、日付に問題なし、万事休すだ。おかしい、ここは何度も検証して問題ないことを確認している、なぜこの段で意図しない動きになるのだ?ああ、思い出した、force or abort  flag を設定していたんだった。force にすると、期日に関係なくenable になるので、この flag を normal にしないと、おっと、Android のアプリがまだリリースできていない、審査が緩いとは言え、force にするのは少し待とう。

こんな感じで、結局、本番を見据えたテストしておけば焦らないで済む訳なのですが、iOS の審査が済まないと本番のテストって審査の結果が気になって手がつかなくなってしまうのですよね、でも、ここでうまくいかなかったら、binary を変更できないのでまさに万事休すのはずで、やっぱりやっておくべきだなと。

あー疲れた・・・

レースの準備:奥久慈トレイル

来週トレイルのレースに参加するのですが、準備が大変だ。レース参加の準備でこんなに面倒だったのは初めて。

まず、案内が届かない。大会ホームページに案内を発送したと書いてあるが、一向に届かない。事務局に問い合わせて、週末はさみ月曜日に返答。ホームページが誤りで今日発送したと・・・そば屋の出前、了解しました。

次に宿泊。エントリーは前日のみとのことで前泊必至。山なのでホテルがあるはずなく、キャンプにすることにして、会場近くのキャンプ場を予約しようとしたらどうやって予約するのかわからない、やっと問い合わせ先発見、フォームで問合せ、後日返事しますの自動返信、嘘ばっか、一週間経過するも未だ返事なし、しょうがないので電話してみる、予約受け付けてくれる、よかったよかった・・・

案内には必須ではないが、サバイバルシート、ライト、応急処置用の道具など各自必要なものを持参とあり、100 円ショップで探すも、サバイバルシートなし、ライトは防水の感じしない、結局買わないことに・・・

あとは、キャンプ道具の準備か。

トレイルランニング:エントリーされてる?

6 月のレースのエントリーを早々に済ませ、案内がそろそろ届く頃と思っていたところ、大会のホームページには、5/11 に案内を送付した旨の記載があるが一向に届かない。一週間経っても届かないので流石におかしいと思い大会事務局に問い合わせたところ返事があり、HP の情報が誤りで、5/21(つまり今日)発送したとのこと。

おいおい、間違えるにもほどがあるだろ。あと何日かで届くだろうと、待つしかないか。案内が届かないとレンタカーの手配や宿泊地の手配をする気乗りがしなくて、でも、今日返事があったので順次手続きを進めよう。レンタカーは手続き完了。軽自動車を借りたのですが安いですね。宿泊地はキャンプ場で予約できるのか聞いてみて、問い合わせを受け付けた旨の返事があり、町営なので明日あたりに返事があるのかな・・

 

ヴェポライザーでシャグ :ヴェポライザー に合うシャグは・・

ヴェポライザー に移行してからほぼ一年経つ。40 種類ほどシャグを試していて、自分に合うシャグがなんとなくわかってきた。

結論からすると、オリエント葉がブレンドされているシャグが自分にはよく合います。オリエント葉は複雑な味で飽きないのです。銘柄を挙げると、チェ(赤)、アクロポリスファインカット、バリシャグ ブルーアメリカン。チェが一番よく思いました。アクロポリスとバリシャグ は酸っぱすぎる。まだ試していないのがマックバーレン のアメリカンブレンドで、これもオリエントがブレンドされているので、次は買って見たい。

そのように思うまでには紆余曲折があった。まず、メンソールブームがあり、次にバージニアブームがあり、natural 系ブームがあり、オリエントブレンドに落ち着いたと。

メンソールは種類が限られてくるので、自然と Colts クリアメンソールを選ぶことになり、これはいまでもたまに買う。バージニアは一時期ハマったのですが、吸い続けると飽きてしまう。飽きる理由はほんのり甘いのがタバコというよりも美味しい食べ物のように感じることがあり、それが飽きる感じを助長しているようです。シャグはもともと燃やして楽しむものなので、ヴェポライザー では違った味になってしまうのだと思います。オリエントがブレンドされることで味が複雑になり、飽きがこなくなる。ヴェポライザー とオリエントは相性が良いのでしょうね。natural 系も奥が深いのですが、総じて香りが少ないことが多く、まだいいのが見つけられていない。

ということで、ヴェポライザー が壊れ気味なので、そろそろ新調しようかなと思いつつ、いまの心境を綴りました。