block の中で使う変数を変更する方法

Objective-C でいつの間にか block 構文を使えるようになって便利というか、method に勝手に組み込まれているので覚えざるを得ない状況です。

block って便利なんですが、文が長くなりすぎてしまいわかりにくいのが難点かと。

その他、block 内で変数を変更しようとしても上手くいかない。これには理由があって、変数のキャプチャ機能があるので block 内部では実際の変数ではなくコピーが使われていて、block の外の変数は変更されない言語仕様になっているようです。

ただ、それでは困ることもあるわけで、そんな時のために、__block 修飾子が用意されていて、ブロックの外で次のように宣言すれば、block の中で使えて値を共有できるようになります。

    CKReference* __block record_ref;

知らなかったので、class のプロパティ経由で値をやり取りできないか?とか色々試してしまいましたが、できなくて困ったなぁと思ったところだったので、すごい助かりました。

ありがとう、黒本。

同期処理に semaphore を使う

CloudKit のプログラムを書いていると、サーバに対する Query 処理などでは非同期処理となる。通常はこれで特に問題がないのですが、フィールドの値に Reference 型を指定してある場合、マスターのレコードを query してサーバ側のレコード番号を取得しておく必要が出てくる。

その後、自分のレコードを保存することになりますが、マスターのレコードを query してくるところが間に合わなくて、値を保存し損ねてしまうことがあります、ってか、通信が高速になったとは言え、普通間に合わないです。

こんな時どうすればいのかわからなかったのですが、semaphore を使って同期処理にしてしまえば良いようです。具体的には以下のような形で・・・

        dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);         dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{

     ... some programs ...

    dispatch_semaphore_signal(semaphore);
    });
    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

  とりあえずやり方わかってよかったです。

CloudKit Dashboard で軽くハマる

CloudKit Dashboard で軽くハマりました。

Query しようとしたら、recordName is not queryable みたいなエラーメッセージ。初め、あ、query 可にしちゃいけないのね、と思って、query の属性を消していったら一向にエラーがなくならない。なんじゃこりゃと思ったら、逆で、recordName に query 属性をつけろってことを言ってた。

さっき、いたずらで色々いじってたら、いつのまにか query の属性を消してしまっていたようだ。

 

610 アメリカ屋のセール

アメ横のアメリカ屋、正式名称は 610アメリカ屋なのだが、頭に付く 610 とは何か?諸説あるようですが、創業者が武藤さんだったので、と言うのが有力視されているものの、真偽のほどはさっぱりわかりません。そんなことはどうでもよくて、610 についてよく覚えていた方が良い。毎年 6 月 10 日はセールを行うのだ。ここ数年やっているので、毎年やると思っていますが、知っているのと知らないのでは大違い。この店、基本的に値引きはないので、実質、年に一度きりのセールということ。

今年は土曜日ということもあり、行ってきました、堪能しました、でも残念なこともありました。全品 20% off ということで、いやー、毎日やってほしいぐらいです。前から目をつけていたジャケット、シャツ、買いました。

一言苦言を。2F は Lee の品揃えが良いのですが、アメリカンスタンダード 102 ワンウオッシュがないというのはどういうことだ?随分色が落ちたのはあったけれども、ワンウオッシュがない。アメリカンライダースはあるけれども、前から言っているように、LM5102 はダメだと。オムツっぽいし、アメスタ 102 の方がかっこいいよ。ってか、アメスタの方が生地薄くて夏場には重宝するっての。それで価格差 5,000 円とか有り得ないだろ。

マルセルで買ってきたからいいけど、店員に聞いてもこの色しかない=製造していないというような言い方で、嘘つけよって感じ。分かっている人からすると、こういう言い方はすごく不信感につながるから、気をつけろよな、チャーリー。

 

CloudKit Dashboard に変化が・・・

CloudKit Dashboard、変わったね!

今までは、保存されているレコードを表示するだけ・・・みたいな、意味ない感じだったんだけど、Dashboard から Query かけられるようになりました。

画面のデザインも一新され、使いこなすと使い易いのだと思いますが、ま、ここは好みの問題もあるでしょう。わたし的には全然慣れていないので、前の方がよかったです。

ML Kit とつなげやすくなったということもありそうですね、全然調べていませんんが。

も少し触ってみます・・・

macOS Sierra で、コピペできなくなった時は・・・・

Sierra は安定していていいね、と思っていたら、とんでもない症状が。

コピペしようとしたらできない。単純な文字列をコピペしようとしてダメ。テキストエディタを開いて、一文字だけコピーしてペースとしてみてもダメ。こうなっている状態で、コピーした直後に Finder でクリップボードを表示を選択してみたら、何も表示されない。無視されている感じ。関係しているのかわかりませんが、Finder でファイルを drag しようとしたらダメ。ファイルをつかめない状況。ひどいねこれ。

そう言えば、長いこと reboot していなかったなと、reboot してみたら、無事直りました。

最近の macOS って、安定しているので、使う→スリープまた使う、の繰り返しで、あんまり再起動しないんだけど、たまには再起動してやるものですね。

 

リーバイスと 501 と・・・

昔はジーンズと言えば Levis で 501 と、マーケティングの餌食になっていたのか、わざわざアメ横まで買いに行くという感じだったんですが、いつの頃からだろう、501 のシルエットが変わっていることに気づいた辺りから、どうもいまひとつ好きになれず、最近は全く買いません。

一番最後に買った 501 は、多分 10 年以上前だろう。その時点で、すでにシルエットが変わっていた。具体的には、昔の 501 は股上が浅かった。浅いとどういう効果があるのかよくわかっていなかったけれども、結果的にかっこいいシルエットになっていたのだ。チノパンからジーンズに履き替えると、股上の浅さから履きにくいとよく感じたものだけれども、このシルエットが最近のはすっかり変わっている。オムツと形容されることもあるようで、股上はすっかり深くなってしまった。当時読んでいたメンズノンノにも、501 は股上が浅い、腰で履くもの、女子の印象として 501 が一番かっこいいと書いてあったし、実際履いてみて浅いと思っていたので、この変更はどうにも受け入れがたい。

さらに言うと、元祖的な宣伝、最近少ないかもしれませんが、かつてはジーンズのオリジンを誇らしげに宣伝していたものです。オリジンである=スタイルが変わらない と勝手に思っていましたが、501 のスタイルは頻繁に変わるのです。勝手に変わらないと解釈していたので、これに気づいた時、ちょっとショックでしたね。

そんなこんなで、最近は、専ら Lee 102 なんですが、LM04102 から LM05102 のシルエット変更がどうにも慣れないし、今の所改悪としか思えなくて、次どのジーンズにしようか思案中。LM0102  なら、5102 より股上浅くていいかもなと思っていて、今度試してみようかなと。