2010年06月17日

iPhoneのUITableViewCellをディフォルトでselectedにする方法

iPhoneプログラミングで、UITableViewCell.selectedをディフォルトYESにする方法。

ここで、素直にcell.selected=YESとしても全く反映されない
ドキュメントにはselectになると書いてあるけど。(

で、どうするか。

[tableView selectRowAtIndexPath:0 animated:NO scrollPosition:0];

を使用する。

どうも
tableView:cellForRowAtIndexPathでの使用は非推奨みたいだが未確認。

こうゆうとこどうなんですかね、Appleさん??
posted by 1.618 at 13:00| Comment(0) | iPhone | このブログの読者になる | 更新情報をチェックする

2010年06月16日

iPhoneでUISliderのTouch Upイベントが二度呼ばれる。

iPhoneのUISliderを弄ってて気づいたんだが、"Touch Up"のイベントが何故か二度コールされる。

調べてみると、UISliderのendTrackingWithTouch:withEvent:メソッドが最初の奴、で、二度目の奴はUIControlからのtouchesEnded:withEventかららしい。

で、調べた結果一番手っ取り早い修正の方法はフラグを使う事。(結局それかいっ!w)

Touch Down用にsliderDown、
Touch Up用にsliderUpというメソッドを用意。
メンバー変数としてpressed = NOと設定。

あとは

-(IBAction) touchDownSlider:(UISlider *)slider_ {
if(!pressed) {
NSLog(@"touchDownSlider: %f", slider_.value);

pressed = YES;
}
}

-(IBAction) touchUpSlider:(UISlider *)slider_ {
if(pressed) {
NSLog(@"touchUpSlider: %f", slider_.value);

pressed = NO;
}
}


として終わり。

はぁiphoneはややこしや。
ラベル:iPhone UISlider
posted by 1.618 at 16:25| Comment(0) | iPhone | このブログの読者になる | 更新情報をチェックする

2010年06月07日

iPhoneで"wait_fences: failed to receive reply"エラー

ここを参照に、UIAlertViewUITextFieldを足してポップアップを表示したところ、"wait_fences: failed to receive reply"とかなんとかいうエラーが出た。
特にプログラムが走る上で問題はなさそうなのだが、気持ち悪い。orz

現象としては、
最初にAlertViewが隠れる。
最後にキーボードが隠れる。
で、エラー発生。

原因としてはUITextFieldがどうも関係しているみたいで、AlertViewを閉じた時にUITextfieldにフォーカスが当たっているとエラーが発生するようだ。
どうしてこうなった!(爆怒

なので、TextFieldからフォーカスを外した後にAlertViewを閉じてやる。
ただ、この時、didDismissWithButtonIndexclickedButtonAtIndexの二つの候補があるが、clickedButtonAtIndexからやってやる。

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
[myTextField removeFromSuperview]; //念のため
[myTextField resignFirstResponder];
}

これで俺の場合は解決できた。
ラベル:iPhone エラー
posted by 1.618 at 12:32| Comment(0) | iPhone | このブログの読者になる | 更新情報をチェックする

2010年05月31日

iPhoneアプリ開発でソースのアナライズの仕方

iPhoneアプリの開発で、自分の書いたソースのアナライズを行ってもらう方法。
ペアプロじゃなくてxcodeにしてもらう。

「プロジェクト」→「プロジェクト設定を編集」→「ビルド」→「ビルドオプション」→性的アナライザを実行」をオンにする

あとは「ビルド」→「Build and Analyze」とするだけ。

ソースコード上に矢印みたいなのが出てくるのでそれを展開したりするだけ。

かなり役に立つ。
勉強にもなるし。
posted by 1.618 at 11:59| Comment(0) | iPhone | このブログの読者になる | 更新情報をチェックする

2010年05月27日

iPhoneでオブジェクトの解放&再定義

iPhoneプログラミングでUIImageの定義と解放で散々な目にあったのでとりあえず書いておく。

とあるオブジェクトでUIImageを定義。

@property(nonatomic, retain) UIImage *image

等としておく。
で、イメージデータだしメモリーを食うのが嫌なんで定義したら速攻DBに移し、releaseで解放

としたのだが…
何故か下記のエラーが出て止まらない。

[UIImage release]: message sent to deallocated instance 0x1ddc10

イッロイロコード内を調査して分かった事は、UIImageオブジェクトが_NSZombie_UIImage等と言ったオブジェクトに変わってる(要は既に解放済み)と言う事。
このオブジェクトにnil、あるいは新しくて意義したUIImageをぶっ込もうとすると上記のエラーが起こるらしい。

『=』でアサインも出来んとはどんだけぢゃ!と思ってtwitterで@iphone_dev_jpの所で文句言ってみたら3分で返答返って来た。w

『UIImageがretainなんじゃない?』

…おっしゃる通りです。orz

でもretainが分からん。w
retain...保持する。どゆこと?w

でここからまた色々調査orz

どうも@propertyでretainとすると、

- (void)setImage:(UIImage*)image
{
if (_image != image) {
[_image release];
_image = [image retain];
}
}

と同等の意味を持つようだ。
俺は手動でreleaseを行っていたから二重にreleaseを行っていると怒られていたようだが、どうも気持ち悪い。

で、propertyのオプションで一番簡単なのが、assign。

- (void)setDelegate:(UIImage *)image
{
_image = image;
}

とほぼ同様らしい。おk、素直に分かる。w

でUIImageの定義を

@property(nonatomic, assign) UIImage *image

に変更して、その周辺を弄って実行。releaseは手動で行う。

エラー無し!

やれやれ…二日ハマってたorz
posted by 1.618 at 19:49| Comment(0) | iPhone | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は180日以上新しい記事の投稿がないブログに表示されております。