ラベル coding の投稿を表示しています。 すべての投稿を表示
ラベル coding の投稿を表示しています。 すべての投稿を表示

2012年10月6日土曜日


本稿は簡単に。
バージョン番号でハマリました。

1.0 → 1.01 → 1.1と進めようとしていたのですが、ダメなのですね。
1.01と1.1で版数が上がっていないと怒られました。

1.0.1としておくべきでした。 しかたないので、1.2にしました。

と、いっていたら、1.4も申請済みというところまで来てしまったのですけどねw



2012年7月24日火曜日




今回はカレンダーへの登録のお話。
Supportalは、試合の日程をカレンダーに登録することができます。

このあたりを参考にさせていただいて、登録UIを出すことができました。
具体的には、EKEvent, EKEventStore, EKEventEditViewController, NSDateの4つのクラスを使って作ります。

そのNSDateで、ちょびっとハマリました。

特定の日時(2012-08-15 19:30)を、NSDataクラスのデータを作るには、日時を表わす文字列と、その文字列の書式(yyyy-MM-dd HH:mm)と から作るのだと理解しました。

そこで、表現形式の文字列がマッチしていないと、てっきり生成されないのかと思っていたのです。 ところが、大昔の日時がセットされるのですね。

思いこみに気をつけねばという小話 でした(笑)

あと、これ(ロケール)も気をつけねば

--- 
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"YYYY-MM-dd HH:mm"];// 文字列の書式設定


[ NSTimeZone setDefaultTimeZone: [[ NSTimeZone alloc ] initWithName: @"Asia/Tokyo" ] ]; // このアプリ内のTimeZoneを日本に設定


NSDate* date = [formatter dateFromString:@"2021-08-15 19:30"]; // ちゃん
と書式と合ってないと。。。

2012年7月21日土曜日

今回も広告領域の話。


iOS用の広告もいろいろあるのですね。ある程度作ってしまうまでiADしかないのかと思ってました。iADが独占しているのかと。

そして比較情報を見て、はじめて知ったのですが、iADは広告表示されないことが多いのですね。 そうすると、その領域がもったいない。。。
かと言って、表示されることもあるわけでアプリの操作に関係あるものは置きたくない。そのためにわざわざ最下部に配置したのだし。
ただ今からマルチな広告ネット対応は気が乗らない。 やるなら、どんなものが表示されるかも調べたいし、なんとなく日程的に難しそうな気がする。。。

広告出ないとか想定してなかったよ。どうしましょう???ということで、今回は仕様レベルでハマりました。


簡単に貼れる広告のようなもの、しかもアプリのテーマに無関係ではなく、コチラ側が内容を決められるものとして、amazonさんのインスタントストアに目を付けました。
これなら掲載商品をアプリテーマに関係するものにできるし、いいかなと。 表示場所は工夫したけど、やっぱり関係ない広告はウザイだけですからね。

しかもウィジットを使えば、毎回同じ表示ではなく掲載商品が切り替わる。
まぁ、amazonさんのバナーとかウィジットは不思議なサイズで、iADとはサイズが合わないけど、そこは横スクロールで見ていただくことにしました。
(320x50のサイズも欲しいです。>アマゾンさん!笑)


最終的にはオフラインでも、この領域が真っ白にならないように、アプリのロゴっぽいイメージのボタン(UIButton)、UIWebImageで表示するインスタントストア、iADという三段重ねにしました。 iADが無いときはWebが、Webアクセスがエラーの時は、ボタンが見えるシカケです。


ロゴをUIImageではなくUIButtonにしたのは、下に隠れている本来のTabBarにタッチイベントが行かなくするためと、UIWebImageのリロード操作用です。



今回の対策は、結果的にオリジナルな工夫になったかもしれないと自画自賛なのであります。エヘン(笑)

2012年7月19日木曜日

(この記事は、プログラム担当の方が書いてます。 前回も実はそうでしたw)
今回のアプリはタブ型のデザインでした。
広告も面白そうだし貼ってみようということになりました。

広告の場所は、操作中に目につく上部や、操作部分に割って入る形を避けたくて、下から広告・タブという順番としました。
そうすると、一番下にタブバーのある標準のTabBarViewControllerは使えません。

タブバーの代わりは、ボタンを並べて作ればいいだろうと安直に考えて実装をしてみました。 具体的には、各ViewControllerサブクラスに、同じようにボタンを並べました。 この方法だと、選ばれているタブのボタンを 色を変えたりすることもできて喜んでおりました。

この実装は、ここなどを参考にさせていただくことで、特に困らなかったです。
きちんと表示されるViewControllerが切り替わります。


ただ、広告を実装しはじめたところでハマリました。

アップルのガイドによると、各ViewControllerにバラバラに広告を貼るべきではないとのこと。切替の度に再読み込みになるので薦められないということのようです。
確かにそのとおりにチラチラしてます。 指摘されてからは、余計に気になります(笑)。

そこで、そもそも タブ型ってどうなってるの? と調べてみました。
ググって載ってる結果と微妙に違うの気もしているのですが、私の理解ではTabBarViewControllerに 高さを縮めた ViewControllerが乗っかっているイメージ。
つまり、出っぱなしの広告やタブボタンは TabBarViewController側に乗せればいいみたい と理解しました。

このイメージが湧いてからは、少しスムーズになりました。
TabBarViewControllerのサブクラスを作って、その上に広告とタブ切替のボタンを貼りました。 乗っけるViewControllerはロードタイミングで縮めておきます。
この方法で満足のいくものができました。

言葉では伝えにくいので絵を描いてみました。多少は分かりやすいでしょうか?




2012年7月17日火曜日



ボタンを押された時に行う処理が少しだけ違うけど ほとんど同じという場合、処理をまとめて1つにしたくなるのがプログラマのサガ(笑)。

たとえば、supportalでは押したボタンに応じて、違うURLが開くというボタンがあります。 それを、ボタン自体がURLの情報を持っていて、ボタンが押された時の処理の中で、ボタンの自身がもつ情報で処理を切り替えるという設計をしたのです。


そうしたらハマリました。ガッツリっと(苦笑)。
具体的には、UIButtonのサブクラスMyUIButtonを作って、プロパティを追加したのです。 そうすると、ストールする現象にあいました。

しかも、ボタンの種類がUIButtonTypeCustomの時は問題ないのに、UIButtonTypeRoundedRectにするとストールする!

いくら考えても、意味不明。。。(角丸にしたらダメってどういうこと?? とハテナ飛びまくりです)


分からないものはしかたがないので、とりあえず、UIButtonTypeCustomで作ることにして先に進みました。




しばらくして、原因は基礎勉強中に判明しました。

ここに NSStringの例が乗っているのですが、UIButtonの場合もほぼ同じ。
UIButtonは、ほぼほぼFactory Methodとしてのクラスクラスタというデザインパターンで作られているみたい。ただし、純粋な抽象クラスではないところが、話を複雑にしているようでした。
 

つまり、私はMyUIButtonのインスタンスを作っているつもりだったのですが、違っていました。 たしかにUIButtonTypeCustomのスタイルの時は正しくMyUIButtonのインスタンスが作られていたけれど、UIButtonTypeRoundedRectにするとUIRoundRectButtonのインスタンスが作られてしまっていたのです。

当然、その時はUIButtonのサブクラスとして機能していないので、私が作ったプロパティを持っていない。 そこにアクセスするものだからストールしていたわけ。


で、どうしたか。。。 必ずUIButtonTypeCustomで作ることにしました。
原因が分かってもやってることは相変わらず(苦笑)。

まぁ、原因が分かってスッキリ!!が大事なのです。 たぶん(笑)