2012年5月15日火曜日

NSDictionaryのKeyにカスタムクラスを使う方法

NSDictionaryのKeyに自作のクラスを使う場合は以下の3つの実装が必要。



- (id)copyWithZone:(NSZone*) zone

- (BOOL)isEqual:(id)object

- (NSUInteger)hash



copyWithZoneはKeyはコピーされてNSDictionaryに保存されるため、インスタンスのクローン処理を実装する必要がある。
hashとisEqualはobjectForKeyでNSDictionaryからValueを取得時に使われる。

まずhashが用いられ、その後isEqualが呼ばれる。
実装はhashはインスタンスごとに一意なhash値を返すことと、isEqualはインスタンスが同じかどうかの判定を行う。


2012年5月13日日曜日

iOSプログラミング忘備録その2

クラスの比較
[self isKindOfClass:[object class]]

toString的なもの
- (NSString*)description

NSDictionaryの中を順番に取り出す方法
for (NSString* key in xyz) {
id value = [xyz objectForKey:key];
// do stuff
}

キーボードを閉じる
[searchBar resignFirstResponder]

Enterでキーボードを閉じる

returnKeyTypeを"UIReturnKeyDone"にし、

memoField.returnKeyType = UIReturnKeyDone;

UITextFieldDelegateプロトコルを継承して、delegate登録。


memoField.delegate = self;


- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [memoField resignFirstResponder];
    return YES;
}



StoryBoardでの画面遷移時に遷移先のViewControllerに何か渡したい場合
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

segue.destinationViewController を使う。

UIButtonへの画像の貼り付け
プロパティにセットするのでは反映されない。
    buttonA.imageView.image = image;

setImageを使う
    [buttonA setImage:image forState:UIControlStateNormal];

デフォルトの色を変える
 [[NavigationBar appearance] setTintColor:[UIColor redColor];




2012年5月5日土曜日

AmazonのProduct Advertising APIはモバイルで使えない

AmazonのAPIを使ってiPhoneアプリを作ろうとして利用規約を読んでいたら致命的すぎる条文があって終了のお知らせです。

以下関連部分なんですが、「携帯端末で使うな」という半端なく厳しい条文があるのでiPhoneどころか全てのスマホ、ガラケー全部アウト。


(e) お客様は、当方の事前の書面による同意なしに、携帯電話またはその他携帯端末、いかなるセットトップボックス(例えば、地上・BS・CATV受信用ボックス、デジタルビデオレコーダー、ストリーミングビデオプレイヤー、ブルーレイプレイヤー、DVDプレイヤー等)または、インターネットテレビ(例えば、Google TV、ソニーBravia、パナソニックViera Cast、アクトビラ、Vizioインタネットアプリケーション等)での使用を目的とした、または意図したアプリケーション上で、またはこれらに関連して、商品関連コンテンツを使用することはできません。 

https://affiliate.amazon.co.jp/gp/advertising/api/detail/agreement.html?ie=UTF8&pf_rd_t=501&ref_=amb_link_60843929_4&pf_rd_m=AN1VRQENFRJN5&pf_rd_p&pf_rd_s=assoc-center-1&pf_rd_r&pf_rd_i=assoc-api-detail-5-v2

どうしてここまで厳しい制約にしているんでしょうか。
Amazonにとってはいろいろ使ってくれたほうがおいしい気がしますが。

こうしてみるとコンテンツを持っているところは強いなぁとしみじみ思うわけです。