Object-Cで多次元配列とか

Posted 2010年7月2日 | Auther dada | Category PC・デジタル | Tag タグ: ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

iPhoneプラグラミングメモ。

たとえばコミケのスペースの座標をまとめた配列を作るとき
「Aブロックの、1番目の、左上座標」みたいな表になるわけですが

NSDictionary *mapPosList = [NSDictionary dictionaryWithObjectsAndKeys:
							[NSArray arrayWithObjects:
							 [NSDictionary dictionaryWithObjectsAndKeys:
							  [NSNumber numberWithInt:100], @"left",
							  [NSNumber numberWithInt:200], @"top",
							  [NSNumber numberWithInt:50], @"width",
							  [NSNumber numberWithInt:125], @"height",
							  nil
							  ],
							 nil
							 ],
							@"A",
							nil
							];

NSLog(@"%d",  [[[[mapPosList objectForKey:@"A"] objectAtIndex:0] objectForKey:@"left"] intValue]);

という感じの、一目みてもわけわからん定義と呼び出しになるわけです。
もっとスマートな記述方法ないですかねえ…。

ActionScriptや JavaScriptに慣れていると

var mapPosList:Objects = {
	"A":[
		{left:100, top:200, width:50, height:125}
	]
};

trace( mapPosList['A'][0].left  );

くらいシンプルなのが当たり前だからなぁ…。

XMLで座標一覧作って、XPath使うのが一番スマートかもしれない。
全データ舐めるってわけじゃないし。

UIButtonのアクション設定でハマった

Posted 2010年6月29日 | Auther dada | Category PC・デジタル | Tag タグ: ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

動的に複数のボタンを作っていたら、ボタンを押したとたん落ちてしまう。
そんな状態にハマりました。^^;

CGRect rect = CGRectMake(mapX, mapY, MAP_DESK_YOKO_W, MAP_DESK_YOKO_H);
UIButton *button = [[UIButton alloc]initWithFrame: rect];
[button addTarget:self action:@selector(mapButtonTouch)
	forControlEvents:UIControlEventTouchUpInside];
[button setBackgroundColor:[UIColor redColor]];
button.tag = count;

comikechk[4537:207] *** -[ComikeMapViewController mapButtonTouch]: unrecognized selector sent to instance 0x48609a0

なんだろーなんだろーと検索しても有効な情報が得られない。
ふと、作例を載せているサイトを見ていたら…あっ!!

[button addTarget:self action:@selector(mapButtonTouch:)
	forControlEvents:UIControlEventTouchUpInside];

@selectorでメソッドを指定する時に最期の「:」を付け忘れただけでした。
うわー、まぬけすぎるw

release しても nil しとけ?

Posted 2010年6月28日 | Auther dada | Category PC・デジタル | Tag タグ: ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

iPhoneプログラミングメモ。

処理進行中を表すために用いられるくるくる回るアニメーション
UIActivityIndicatorView が用いられますが、解放関係でハマったのでメモ。

[indicator stopAnimating];
[indicator removeFromSuperview];
[indicator release];

アニメーションをストップして、ビューから外して、解放しています。
が、このコードだと

-[UIActivityIndicatorView stopAnimating]: message sent to deallocated instance

なんてエラーになってしまいました。
releaseの後にさらに nilを代入したら問題なく動作するようになりました。

[indicator stopAnimating];
[indicator removeFromSuperview];
[indicator release];
indicator = nil;

おそらく他の部分で UIActivityIndicatorViewインスタンスの有無を
チェックして処理をわけている箇所があるので、そのへんが関係あるのかも。
ないのかも。

if( indidator ){
 〜くるくるアニメがある時の処理〜
}

あとはこのへんが多少なりとも関係しているんでしょうか?

CoreDataで日本語検索が上手くいかない

Posted 2010年6月22日 | Auther dada | Category PC・デジタル | Tag タグ: , , ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

はじめてのあいぱっどあぷり。
略して「はじあい」。

そんなワタクシですが無謀にもCoreDataにまで手を出しています。
で、日本語検索が出来なくてハマったのでメモ。

「day」という項目に曜日が格納されており、
それごとにデータを抽出しようとしています。
「dayList」は曜日一覧をまとめたNSArray。
「gNowDay」は現在表示させたい曜日の番号です。

NSPredicate *preDay = [NSPredicate predicateWithFormat:@"day == '%@'",
	[dayList objectAtIndex:gNowDay]];
[request setPredicate:preDay];

これだとダメでした。
「'%@'」の部分を「'土'」など決め打ちにしたらいけました。

次はうまくいったコード。

NSString *preDayStr = [NSString stringWithFormat:@"day == '%@'",
	[dayList objectAtIndex:gNowDay]];
NSPredicate *preDay = [NSPredicate predicateWithFormat:preDayStr];
[request setPredicate:preDay];

一度NSStringに格納してからやったら出来ました。
そういうもんなのかー。

そしてこれは複合条件の指定。NSCompoundPredicateを使います。
「土曜の東館」とか指定するわけですね。

NSString *preDayStr = [NSString stringWithFormat:@"day == '%@'",
	[dayList objectAtIndex:gNowDay]];
NSPredicate *preDay = [NSPredicate predicateWithFormat:preDayStr];
NSPredicate *preArea = [NSPredicate predicateWithFormat:
	@"areaCode == %d",areaCode];
NSPredicate *allPre = [NSCompoundPredicate
	andPredicateWithSubpredicates:[NSArray arrayWithObjects:
	preArea, preDay, nil]];
[request setPredicate:allPre];

Object-Cの割り算でハマった

Posted 2010年6月20日 | Auther dada | Category PC・デジタル | Tag タグ: ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

もんのすごい単純なことでドハマりました…。

float floatNum = 128 / 255;
NSLog(@"%f", floatNum);  // 結果は「0.0000〜」
float floatNum = 128.0 / 255.0;
NSLog(@"%f", floatNum);  // 結果は「0.501960〜」

小数点のついた値でないと切り捨てられちゃうのかーーーー!!!
c言語ってのはそういうもんなんですか?

しかし整数で格納している値を計算して小数点を出したい時は
どうやって「.0」をつければいいんだろう…。

int intNum = 10;
float floatNum = intNum;
NSLog(@"%f", floatNum/50);  // 結果は「0.2000〜」

なるほど、いったん float型に代入すればいいのか。
って、めんどくさいw

Object-Cで16進数文字列から数値に

Posted 2010年6月19日 | Auther dada | Category PC・デジタル | Tag タグ: ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

iPhoneプログラミングメモ。

htmlなどで使う16進数の色を10新数の数値に変換する方法。

NSString *colorString = @"ff0000";
int r,g,b;
sscanf([colorStr UTF8String],"%02X%02X%02X",&r,&g,&b);

NSScanner の scanHexInt を使ってもできるみたいだけど、
こっちのがシンプルなので。

#defineを使う方法なんてのもあるんですね。

#define HEXCOLOR(c) [UIColor colorWithRed:((c>>16)&0xFF)/255.0 
green:((c>>8)&0xFF)/255.0 
blue:(c&0xFF)/255.0 
alpha:1.0];

UIColor *color = HEXCOLOR(0xff00ff);

透過PNG対応の画像連結ソフト「むすびちゃん」

Posted 2010年5月1日 | Auther dada | Category PC・デジタル | Tag タグ: , ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

吉里吉里で使うボタン画像は横方向に連結したものを使います。
Photoshopでも作れるのですが透明部分を含んでいる場合に結合が面倒なので
(どこが境目かわかりにくいから)
画像連結ツールを作ってしまいました。

むすびちゃんをお迎えする

ダウンロードしたファイルをダブルクリックするとインストーラーが立ち上がります。
AdobeAIRがない環境では AdobeAIRも一緒にインストールされます。

「発行者:不明」になってますが気にしないでください。

スタートメニューのプログラムに 画像連結「むすびちゃん」 が登録されます。

むすびちゃんと遊ぶ

連結方向、ファイル名修飾、保存先を設定し、
連結した画像をまとめてドロップするだけです。

入力対応画像フォーマットは PNG / JPEG / GIF で、出力は PNGのみです。
特徴としては透過PNGにも対応しています。

画像連結ツールっていくつかあるんですが、
透過PNGには対応していなかったり、
画像選択が面倒だったり、
自分に合うのがなかったのです。

もっとお気楽極楽に使えるものがほしい!
そんな願いの篭もったツールです。

もっとみんなが作ったえろげがほしい!
そんな願いも篭もってます。

正規表現の「先読み」

Posted 2010年4月16日 | Auther dada | Category PC・デジタル | Tag タグ: , ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

数値を3桁ごとに「,(カンマ)」で区切るのを調べていたら
WadadanetさんのAS3で数字を3桁毎にコンマ区切りにするが見付かり
目的を達することは出来たのですが、構文の中に「?=」や「?:」など意味のわからないものが。

Twitterで質問してみたら正規表現の「先読み」らしいことがわかりました。

大ざっぱに言うと、
マッチングはするけど、カーソルは先読み部分の前で止めちゃうよ
ということなのですね。

そんなわけで自分向けメモ。
javascriptで書くとこんなん。

var maho = "マホは咲の真似してリンシャンあがった";

document.write(
	maho.replace( /(マホは(?=.+あがった)咲の真似して)/, "$1カンして" )
);
// 先読みを使った結果
// マホは咲の真似してカンしてリンシャンあがった

document.write(
	maho.replace( /(マホは咲の真似して).+あがった/, "$1カンして" )
);
// 先読みを使わない結果
// マホは咲の真似してカンして

先読みを使うと「あがった」の部分までマッチングするけど、
その直前までしか「$1」で取得してません。

従来の方法だと「あがった」まで取得してしまうので、
同じように置換すると後半部分が消えてます。

従来方法で同じ結果を出すならこんな感じでしょうか。

document.write(
	maho.replace( /(マホは咲の真似して)(.+あがった)/, "$1カンして$2" )
);
// マホは咲の真似してカンしてリンシャンあがった

これでもいいですが、「リンシャンあがった」の部分になんらかの処理を加えたい時、
カーソルは通り過ぎているのでちょっと面倒なことになります。

咲-Saki- ラブじゃん マホちゃんの必殺技完成! 咲-Saki- ラブじゃん マホちゃんの必殺技完成!
スクウェア・エニックス

スクウェア・エニックス 2010-01-29
売り上げランキング :
おすすめ平均

Amazonで詳しく見る by G-Tools

Progressionのコマンドで分岐

Posted 2010年3月6日 | Auther dada | Category PC・デジタル | Tag タグ: , ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

コマンドリストを実行している時、
途中のコマンドの結果によって分岐させたい時の方法。

var hogeCommand:HogeCommand = new HogeCommand();
var serial:SerialList = new SerialList();

serial.addCommand( hogeCommand );

serial.addCommand( new Func( function():void {
	// コマンドの結果で分岐
	if ( hogeCommand.value ) {
		serial.insertCommand( new Trace("コマンドを挟む"));
	}
}));

serial.execute();

HogeCommandクラスの実行結果を受け取りたいので
インスタンスを先に作っておきます。

var hogeCommand:HogeCommand = new HogeCommand();

今回のキモ「insertCommand」です。
これにより動的にコマンドを挿入させることができます。

	// コマンドの結果で分岐
	if ( hogeCommand.value ) {
		serial.insertCommand( new Trace("コマンドを挟む"));
	}

このやり方についてはIs It So Easy?さんが詳しく書かれています。
this.parentで挿入することも出来るんですねー。

[改訂版]ActionScript3.0プログラミング入門 for Adobe Flash CS4/CS3 [改訂版]ActionScript3.0プログラミング入門 for Adobe Flash CS4/CS3

ビー・エヌ・エヌ新社 2009-07-23
売り上げランキング : 79902

Amazonで詳しく見る by G-Tools

Progression4のリソース系で謎のエラー

Posted 2010年3月2日 | Auther dada | Category PC・デジタル | Tag タグ: , ,
Twitterにツイートする Facebookでシェアする はてなブックマーク

いったい何がキッカケだったのかまったくわからないけど、ある日突然出てきたエラー。

Resource.as、行 44
1004: 名前空間が見つからないか、コンパイル時定数ではありません。
progression_internal static const $collection:IdGroupCollection = new IdGroupCollection();

いろいろ試して、音声ファイルがリンケージされていると発生することがわかりました。
下記のようにごく一般的なファイルを普通にリンケージしただけえす。

ファイル:testse.wav
クラス:testse
基本クラス:flash.media.Sound

「最初のフレームに書き出し」のチェックを外すとエラーは出ません。

しかし上記チェックを外すわけにもいかず色々試していたら、
Index.asに下記の行を追加したらエラーが出なくなりました。

function hogehoge():void {
	getResourceById("hoge").data;
}

この関数はどこからも呼ばれませんが、記述しておくだけで良いようです。

バグなのか仕様なのかはわかりませんが、公式のフォーラムに報告しておきました。

ActionScript 3.0 エラーアーカイブス コンパイルエラー・コンパイラ警告・ランタイムエラーの解法 ActionScript 3.0 エラーアーカイブス コンパイルエラー・コンパイラ警告・ランタイムエラーの解法
大重美幸

ソシム 2009-09-09
売り上げランキング : 83197
おすすめ平均

Amazonで詳しく見る by G-Tools

カテゴリー