5,000 円のクーポン券が当たった。
某店の 5,000 円クーポン券が当たってしまった。
よく考えると、店はよく見るのだけれど、最近は買うものがないなぁと思っていたところ。以前は、Lee の国内生産ジーンズが置いてあったんだけど、最近はアメリカで流通しているものばかりで、ちょっといらない感じ。ジーンズ購入する気になれず、どうしたものかと。
ネットでよく品定めして、キャンバーの白 T にしようかなと思ったんだけど、会社に着ていけそうにもないしなぁ。悩んだ末、Saintt James の薄手 T シャツにしました。これ、まともに買うと 6 千円以上するので、クーボンなかったら絶対買わないなと。
来週も抽選があるようなので、また応募しました。当たったらどうしよ。
segue で画面遷移するときに値を渡せない・・・
Xcode で画面を作り、segue で接続してやると特にプログラムしなくても画面遷移ができてとても便利なんですが、画面遷移する折に遷移先に値を渡してやりたい時があります。
そんな時どうするのかよくわからなかったんですが、いろいろ調べてみた結果、以下のようにするとすんなりだと。
1. 遷移先のクラスに、値受け取り用に property を作っておく
2. 遷移元では、prepareForSegue メソッドを実装。segue が複数ある時のために、メソッド内では identifier で名前を取得して判別すべし。
3. prepareForSegue メソッド内では [segue distinationViewController] とすれば、遷移先のクラスが取得できる。このクラスのプロパティに必要な値をセットしよう。
文字で書くとまさにこのようなことなんです。決して間違いではありませんが、すんなり値を渡せずかなりはまりました。理由は、遷移先の ViewController を設定した際、m ファイルと h ファイルは作ってあったのですが、class 名が null で設定していなかったので、遷移してエラーになっていました。
わかってしまえば簡単なことですが、分かるまでが大変な苦労で、おや?配列は渡すことができないのか?いやそんなことはない、ネット検索したら渡している例がある、など、ホント、理由がわかるまでに苦労しました。
今日の教訓:ViewController で画面を新しく作ったら、class 名を設定することを忘れてはいけない。
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 円とか有り得ないだろ。
マルセルで買ってきたからいいけど、店員に聞いてもこの色しかない=製造していないというような言い方で、嘘つけよって感じ。分かっている人からすると、こういう言い方はすごく不信感につながるから、気をつけろよな、チャーリー。