1 名前:デフォルトの名無しさん [2009/04/15(水) 00:11:00 ] Objective-C(オブジェクティブ シー)はプログラミング言語の一種。C言語をベースにSmalltalk型のオブジェクト指向機能を持たせた上位互換言語。 (Wikipedia:ja.wikipedia.org/wiki/Objective-C より) Objective-C [ObjC part:3]; ttp://pc12.2ch.net/test/read.cgi/tech/1186543111/ Objective-C ttp://pc11.2ch.net/test/read.cgi/tech/1106983092/ Objective-C ttp://pc5.2ch.net/tech/kako/990/990574267.html
369 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 03:26:11 ] > NSStringに変換してからNSNumberに再変換 何したいのか分からないから、この処理の部分を書いてみて
370 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 04:10:56 ] >>369 char *c = (Cの関数); NSString *str = [NSString stringWithCString:c]; NSNumber *num = [NSNumber alloc] initWithInt:[str intValue]]; NSStringを介さずNSNumberにしたいです。
371 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 04:23:25 ] [NSNumber numberWithInt : atoi(c)]; ってことか。NSString かませる必要ないね。
372 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 04:41:21 ] >>371 そんな関数があるんですね、ありがとうございました!
373 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 07:34:32 ] >>370 べつにそれでいいでしょう。なんでそれじゃいやなの? あと、strintWithCString は deprecated なので使わないこと! 文字コードの問題でいずれハマりますよ。 かならず UTF8String か encoding: つきのメソッドをつかってください
374 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 11:07:42 ] >>367 「とりあえずnilをぶち込んでおく」とかいう意味のない癖をつけるよりも、 NSErrorに触る前にその処理が成功したのか失敗したのか判断する癖をつけましょう。 developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ErrorHandlingCocoa/CreateCustomizeNSError/CreateCustomizeNSError.html#//apple_ref/doc/uid/TP40001806-CH204-SW2 処理が成功した場合、NSErrorにobjectが代入されていることは保証されていません。
375 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:47:17 ] 意味なく無いだろ
376 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:54:27 ] >>375 いや、訳も分からずとりあえずnilを入れるのは良くないよ、て言いたいんじゃないの?
377 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 00:58:25 ] 値が未定義な自動変数がクラッシュの 温床になるって書いて置けばまだ 分かりやすいかな。
378 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 02:04:19 ] 萩原本にはNSErrorにほ取り敢えずnil入れとく癖を付けろと書いてあったよ。
379 名前:デフォルトの名無しさん [2009/10/14(水) 16:51:04 ] 質問です。 クラスAの中でクラスBのオブジェクトを保持したくて、 クラスBの中でクラスAのオブジェクトを保持したいのですが、 それぞれのヘッダファイルの中でimportしようとすると入れ後状態?みたいになって コンパイルが通りません。こういう場合はどうすればいいのでしょうか。
380 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 16:58:48 ] >>379 循環参照が発生してるのかな? スーパークラスかインターフェイスを作成して、それを保持させるとどうかな?
381 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 16:59:38 ] @class
382 名前:デフォルトの名無しさん [2009/10/14(水) 17:00:05 ] >>380 あーなるほど、そういう方法があるんですね。 ありがとうございました!
383 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:13:55 ] >>380 , 382 まてまてまてw >381 の言う通り、@class をつかえ。 ClassA.h; @class ClassB @interface ClassA : Hoge {ClassB *clsB} @end ClassA.m; #import "ClassA" #import "ClassB" ClassB.h; @class ClassA @interface ClassB : Piyo {ClassA *clsA} @end ClassB.m; #imprt "ClassB" #import "ClassA"
384 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:14:49 ] しつれい、@class ClassA; ね。";" が抜けた
385 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:59:46 ] >>383 ぎゃー、すでに変更し始めてました。 ちょっとバックアップファイルから復元して@classでやってみます。
386 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 18:04:48 ] >>385 Objective-Cに興味があってこのスレ見てるけど、コードを書いた事が無いのにレスした俺のせいでスマン…
387 名前:デフォルトの名無しさん [2009/10/14(水) 18:13:47 ] @classで一瞬で解決しましたw ありがとうございました! >>386 なんという・・・w
388 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 18:48:20 ] >>386 >Objective-Cに興味があってこのスレ見てるけど、コードを書いた事が無い なんだ、俺は他にもいたのか
389 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 21:15:20 ] 一度くらい書けよw
390 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 10:51:48 ] cat > hello.m #include <stdio.h> int main(int argc, char*argv[]){printf("Hello world.\n");return 0;} ^D make hello ./hello サフックスが.mだからObjCとしてコンパイルされます! これでObjCプログラマの仲間入りです!
391 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 11:06:11 ] それでいいなら俺も書いた事あるぜ!w
392 名前:デフォルトの名無しさん [2009/10/16(金) 00:58:07 ] NSStringの中に文章が入っているのですが、その中にあるURLをリンクに置換したいと考えています。 例えば文章の中に www.google.co.jp/ のようなアドレスがあれば、 <a href="http;//www.google.co.jp/>http;//www.google.co.jp/</a> のように置換したいのですが・・・やり方がいまいちわかりません。 とりあえずNSStringのメソッドを見る限りだと無理で、NSMutableStringのメソッドを見る限りだと、 replaceOccurrencesOfString:withString:options:range:のようなメソッドがあったのですが、 正規表現が使えるのか不明です。何かいい方法はないでしょうか?
393 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 01:04:28 ] regex(3)
394 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 01:49:26 ] >>392 ありがとうございます。 RegexでググったらRegkit liteというのがあったのでそれを使いました。 ただ、URLのマッチングが上手くいかないので見ていただけないでしょうか・・・ NSString *searchString = @"I like www.google.co.jp/ yeah!!"; NSString *regexString = @"(|https:// ){1}[\\w\\.\\-/:\\#\\?\\=\\&\\;\\%\\~\\+]+"; NSString *replaceWithString = @"<a href=\"$1\">$1</a>"; NSString *replacedString = NULL; replacedString = [searchString stringByReplacingOccurrencesOfRegex:regexString withString:replaceWithString]; これで置換した結果が、 I like <a href="http://"></a> yeah!! になります。www.google.co.jp/が消えてしまってるのですが、何が間違ってるのでしょうか?
395 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 02:01:15 ] 謎ですね。http://しかマッチしていないなら I like <a href="http://"></a>google.co.jp yeah!! になりそうなんですけどね・・・
396 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 02:05:04 ] そのライブラリは知らないけど、普通はカッコで囲ってるところしかキャプチャされないのでは?
397 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 02:25:22 ] NSString *regexString = @"(https?://[a-zA-Z\.\-\#\?\=\&\;\%\~\+]+)"; でいいんじゃないの
398 名前:デフォルトの名無しさん [2009/10/16(金) 02:44:41 ] 括弧で囲ってるところしかキャプチャされないんですか・・・ 無事マッチできました。ありがとうございました!
399 名前:デフォルトの名無しさん [2009/10/17(土) 05:37:25 ] 次のようなプログラムを動かすと配列0番目を参照してるはずなのに 200が返されます。何故なんでしょうか? int main(int argc, char *argv[]) { array = [[NSMutableArray alloc] init]; [self bindInt:0 value:100]; [self bindInt:0 value:200]; Element *h = [array objectAtIndex:0]; printf("value:%d¥n", *(int*)h.p); } - (void)bindInt:(int)holderId value:(int)value { // Elementクラスにはvoid *p変数のみ定義されてる Element *holder = [[[Element alloc] init] autorelease]; holder.p = &value; [array addObject:holder]; } ちなみにbindIntのhoderId引数自体を外すと0が返されます。 これもよく理由がわかりません。。
400 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 06:31:06 ] なんでintのポインタ渡すの? それスグ死ぬやん。
401 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 06:50:20 ] >>400 へ、死ぬんですか。 変数pはvoid*にして、様々な型を格納できるようにしたかったのです。 まだあまり理解できていないのかも。 この辺りは何をキーワードに調べれば良いのでしょうか。
402 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 10:15:22 ] void * に格納できるのはポインタだけで、「様々な型を格納」できたりはしないぞ。
403 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 11:45:32 ] その前に self って誰?
404 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:11:23 ] プールもないのに autorelease ?
405 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:29:59 ] >>399 >holder.p = &value; ここでスタック上に一時的に作られたローカル変数のアドレス取ってるから ゴミを拾って当たり前 Cの初歩で「ローカル変数のアドレス返しちゃダメ」みたいなトピックあると 思うからその辺から読む事
406 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:54:20 ] NSImage *backBlock = [[NSImage alloc] initWithContentsOfFile:@"./images/Block_0.png"]; のところで、 initializer element is not constant というエラーが出て途方に暮れています。 何が悪いのか、教えてください。
407 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 15:13:57 ] それを NSImage *backBlock = [[NSImage alloc] initWithData:[NSData dataWithContentsOfFile:@"./images/Block_0.png"]]; とかに変えてもエラーが出るのなら、他の部分が問題。
408 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 18:26:43 ] というか、突っ込みどころが多すぎてどこから突っ込んだらいいのやら。
409 名前:デフォルトの名無しさん [2009/10/18(日) 05:31:50 ] とりあえず俺のケツから突っ込んでこいよ
410 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 07:59:06 ] 次のようなコードでmyNotePadオブジェクトのプロパティの値を変えようと試みているのですが、//Diagnosticsの部分でNSLogの結果が 0 や (null)と表示されてしまいます。 // プロパティnoteTextにコンテントの内容をセット myNotePad.noteText = tvContent.text; // プロパティsavedDateに日付をセット myNotePad.savedDate = [NSDate date]; // プロパティsaveCyclesをインクリメント myNotePad.saveCycles++; //////// Diagnostics NSLog(@"in saveData - tvContent.text - %@", tvContent.text); // これはちゃんと表示される NSLog(@"in saveData - noteText - %@", myNotePad.noteText); // nullと表示される NSLog(@"in saveData - savedDate - %@", myNotePad.savedDate); // nullと表示される NSLog(@"in saveData - saveCycles - %d", myNotePad.saveCycles); // 0と表示される 初歩的な質問で申し訳ないのですが、どなたか教えていただけますか? マジで困ってます・・・
411 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 08:23:33 ] すみません自己解決しました
412 名前:デフォルトの名無しさん mailto:デフォルトの名無しさん [2009/10/19(月) 11:03:58 ] >>411 自己解決したのはいいとして、何が原因だったかくらい書いたらどうかな? それを読んで役に立つ人もいるはずだし。 ここでいろいろ助けてもらっても、結果は独り占めして誰にも教えたく無い、 っていう性格なら、まあ強制はしないけどね。
413 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 12:33:12 ] 変数に入った文字列を=で代入なんてできない。初歩的すぎる。
414 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 12:47:57 ] 「myNotePadがnilでした」に 3 retainCount かける。 >>413 なんの話をしているの?
415 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 13:54:51 ] >>412 そうですね。すみません。 実はメモリをallocしてなかったのが原因でした >>413 初心者は帰れ!!!! >>414 そうです。nilでした
416 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 13:57:45 ] 余計なことを言ったばかりに一気に印象が悪くなる。
417 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 19:17:41 ] 馬鹿は死ななきゃ治らないから415の罪じゃないさ。
418 名前:デフォルトの名無しさん [2009/10/19(月) 21:55:11 ] malloc: *** error for object 0x4c52320: pointer being reallocated was not allocated これは一体どういう意味なのでしょうか? メモリを再確保されたポインタはメモリ確保されませんでした? いまいちよく分からないのですが、具体的にどういう時に出るエラーなのでしょうか?
419 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:13:15 ] >>418 /usr/lib/libSystem.B.dylib の szone_realloc() 関数の中で szone_size() 関数が 0 を返すと発生するエラーだよ。 www.opensource.apple.com/source/Libc/Libc-583/gen/scalable_malloc.c
420 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:13:24 ] >>418 #include <stdlib.h> int main(int argc, char **argv) { char *foo = "abc"; foo = (char *)realloc(foo, sizeof(char) * 4); return 0; } みたいなことをしたときとか。
421 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:14:15 ] 再確保しようとしたポインタは確保されませんでした?
422 名前:418 [2009/10/19(月) 22:44:28 ] んー明示的にメモリの再確保してる場所はないんですけどね・・・ NSMutableStringのappendStringあたりで変なことになってるんですかね。 とりあえずどういうエラーなのかは分かったので、地道に問題箇所探していきます。 ありがとうございました!
423 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:46:34 ] >>414 413 は、OpenStep API が出る前で NSString* が無かった頃の人なんだよ。 というかここは Obj-C スレなので、Foundation があることを 仮定しないのが自然じゃないかな。 あ、でも、property 使う時点で Obj-C 2 か ...
424 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:01:33 ] NSStringが登場する前だってNXStringとかあったじゃん
425 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:40:46 ] 疑問です。 NSLog(@"%.f", 0.5); NSLog(@"%.f", 1.5); NSLog(@"%.f", 2.5); NSLog(@"%.f", 3.5); NSLog(@"%.f", 4.5); NSLog(@"%.f", 5.5); とした時、四捨五入されて出力結果は 1 2 3 4 5 6 になると思いきや実際には 0 2 2 4 4 6 となりました。偶数時は5以下は切り捨て。奇数時は5以上を繰り上げているようです。 printfでも同様でした。 なぜこうなるのでしょうか? 10.5、10.6、Cocoaアプリケーション、Standard Tool、C89、C99 等いくつか状況を変えて試しましたがいずれも同じ結果でした。
426 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:55:31 ] >>425 偶数丸め
427 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:56:05 ] NSURLConnectionを使ってHTTPでデータの差分取得をしたいのですが NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60]; [request addValue:@"Wed, 30 Jul 2008 12:12:12 GMT" forHTTPHeaderField:@"If-Modified-Since"]; [request addValue:@"445-" forHTTPHeaderField:@"Range"]; NSData *data; NSURLResponse *response; NSError *error = nil; data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; とりあえずリファレンスとか見ながら頑張って↑のコード書いたのですが、 結局差分取得はせずに全部ダウンロードしてしまいます。 どうすればいいのでしょうか・・・
428 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 00:02:33 ] >>426 ググってみました。ありがとうございます。
429 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 00:06:39 ] あー、アホだー bytes=が抜けてました。死んできます。
430 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 00:15:00 ] この様はiPhoneさまさまなのかな。
431 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 00:59:23 ] サマーはもう終わりました
432 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 11:33:53 ] 次のスレのはじめには、ここはあくまで言語仕様のスレで、 Mac / iPhone Cocoa プログラムはそれぞれのスレにいくよう 強調したほうがよいかも
433 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 16:28:20 ] 別にいいんじゃん?暇だし。
434 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 16:52:33 ] まぁね 暇だし 仕事ないし
435 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 16:53:48 ] >>434 暇なら仕事みつけろよwww
436 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 17:01:38 ] 働いたらそこで試合終了だって安西先生が言ってた
437 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 17:22:02 ] 俺は、親父が残してくれた財産で、 働かずに住んでいるよ。 結局、人生は親の財産次第。 馬鹿な親の子に生まれた子は、一生馬鹿。
438 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 19:01:23 ] 奇遇だな。俺も2chではそうなんだよ。 相続税のこととか考えると、まったく頭が痛いよ。
439 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 20:44:08 ] >>437 ,438 働かず、暇があるなら税法をやれば良い。 それで今の税法の穴を見つけてこっそり使えばいいんじゃね。
440 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 21:17:46 ] スレ違いうざい。
441 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:10:19 ] そういうスレ違いは許さないんだなw まぁ当たり前っちゃ当たり前か。スレ違いというか、板すら違うからなw
442 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:42:31 ] 国内のMac信者ってなんでこう雑魚ばっかりなんだろう
443 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:04:20 ] まぁ荒れる前にこの話題は終わらせちゃおうぜ!! releaseだ!release!!
444 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:17:59 ] Cocoa でドットを描くのは NSRectFill(NSMakeRect(x,y,1,1) するのが一般的なの? 難しいな…
445 名前:デフォルトの名無しさん [2009/10/21(水) 22:31:28 ] せっかくだからOpenGL使ったら?
446 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 22:39:22 ] なるほど。GL_POINTS を使って点を描く訳ですね。 お絵描きソフトを作ろうと思っているのですが、NSBezierPath 等 Cocoa の API を 使うのと比べてメリットはどんなところがあるでしょうか。
447 名前:デフォルトの名無しさん [2009/10/22(木) 09:44:53 ] 他機種向けのソフトを作る時も、流用しやすい
448 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 19:26:34 ] クロスプラットフォームなのは嬉しいですね。 ただ今回はプラットフォーム固有の機能をガンガン使って コーディングするつもりなので、他機種の事は考えていません。
449 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 19:35:39 ] >>444 みたいな面白いこと言い出す奴にそれは無理だと思うの
450 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 19:43:08 ] ん、どうしてそう思ったの?
451 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 21:46:06 ] 何だ、冷やかしか
452 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 23:49:37 ] 前々から言おうと思ってたけど、iPhoneアプリ開発スレ行けよ こっちとマルチすんな
453 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 23:53:20 ] 前々?マルチ?iPhone? いったい誰に向かって言ってるんだ?
454 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 23:59:16 ] 普通の人には見えない何かが見えちゃうと大変だな…
455 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 00:10:45 ] >>450-451 ,453-454 www
456 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 00:13:51 ] 何がしたいのか全く分からん… お大事にね
457 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 00:25:50 ] で、結局 >>449 は何だったの?
458 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 00:26:49 ] 君らもうMac板に帰ったら
459 名前:デフォルトの名無しさん [2009/10/23(金) 02:43:38 ] おちつけぢょwww
460 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 03:14:57 ] 何だ、冷やかしか
461 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 04:27:21 ] ひややっこおいしいです
462 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 16:02:24 ] NSStringに0123918201とか023384722とかの数字文字が入っているのですが、 それらのNSStringを if([numString1 intValue] < [numString2 intValue]){ } else if([numString1 intValue] == [numString2 intValue]){ } else{ } のように数値で比較した時、なぜか絶対にイコールのところに入ってしまいます。 NSLogでそれぞれに入っている数字は違う事を確認してるのですが、 それでも==の条件式に当てはまってしまいます。 どういう原因が考えられますか?
463 名前:デフォルトの名無しさん [2009/10/23(金) 16:17:41 ] すみません、調べてみたら、NSStringに入ってる数字は違うのですが、 intValueにしたら全然違う数値になっている事がわかりました。 NSStringに031424045645って入ってるのに intValueの値は2147483647になってます。 これは何でなんでしょうか・・・?
464 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 16:27:38 ] 31424045645 → 7 5104 E24D 2147483647 → 7FFF FFFF
465 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 16:28:45 ] signed int の最大値 INT_MAX が 2^31-1 = 2147483647 って知らないの? doubleでも使え
466 名前:デフォルトの名無しさん [2009/10/23(金) 16:39:38 ] あーなるほど・・・。intは4バイトなのでオーバーフローしちゃってるわけですね。 unsigned型でも全然桁がたりませんね。基本的に12桁以下の数値の文字なのですが、 これを数値的に比較するのにいい方法はないでしょうか?
467 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 16:41:29 ] long longか__int64
468 名前:デフォルトの名無しさん [2009/10/23(金) 16:48:28 ] >>465 doubleValueだと==を検出できなくなる可能性がありますね。 roundとかで切り捨てれば解決なのかな・・・ ちょっとやってきます。
469 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 17:15:02 ] NSLog(@"%ll", [numString1 longlongValue]); でlong long型が表示出来なかったので、数値が確認できず若干不安ではありますが、 期待通りの動作をしているようなので大丈夫なようです。 ありがとうございました。
470 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 17:55:21 ] %qi です。 ここ参照。 developer.apple.com/mac/library/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265
471 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 18:01:50 ] >>470 わぁ、ありがとうございますw 大丈夫だと言い聞かせながらも、もの凄く不安でしたw 念のためちゃんとなってるか調べてきます。
472 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 18:17:40 ] NSLog(@"%@ %qi", numStringX, [numStringX longlongValue]); 文字とそれをlonglong型に変換したものの対応表ですが・・・ 031423045645 5833744870023364608 031423045646 5833744874318331905 031424045644 5838039833024397314 031424045644 5838039833024397315 031424045645 5838039837319364611 031424045646 5838039841614331908 031425045644 5842334800320397317 031425045644 5842334800320397318 031425045645 5842334804615364614 031425045646 5842334808910331911 全然大丈夫じゃなかったです。一応文字数値が大きいものほど、 longlongの値も大きくなっているので正常に動作はしているのですが、 んー何でこう思った通りに動かないんだろうか(´・ω・`) どこも間違ってるようには見えないんですけど・・・
473 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 18:34:11 ] 031423045645 → 7 50F5 A00D 5833744870023364608 → 50F5 A00D 0000 0000 何が起こってるんだろ?
474 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 18:56:22 ] 031423045646 → 7 50F5 A00E 5833744874318331905 → 50F5 A00E 0000 0001 二つ目に関してはLSBが1になってますね。 んー・・・元のNSStringに何か問題があるんですかね・・・
475 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 19:53:27 ] 試しに↓をやってみたら NSString *testString = [NSString stringWithString:@"012345012345"]; NSLog(@"test: %@ - %qi", testString, [testString longLongValue]); 出力が test: 012345012345 - 12345012345 になってるので、基本的な使い方としては間違ってない感じですね。 numStringの中に入ってるデータに何か罠がありそうな感じですが、 普通にNSLog(numString)で表示させても、特に変な様子は見られないんですけどね・・・
476 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 20:01:16 ] ここはお前のメモ帳だ。いいぞもっとやれ。
477 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 20:02:33 ] 何かついてるんでしょうね。とりあえず、NSScanner で読んでみたら? NSString *str = [NSString stringWithUTF8String:"031425045646"]; NSScanner *scan = [NSScanner scannerWithString:str]; NSLog(@"%@, %qu", str, [str longLongValue]); NSLog(@"%qu", value); //031425045646(, 31425045646 //31425045646
478 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 20:06:18 ] あ、ごめん、スキャン部分が抜けてた。 uint64_t value; [scan scanLongLong:(long long*)&value];
479 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 20:09:01 ] NSLog(@"%@ %qi", numStringX, [numStringX longlongValue]); longlongValue なんて method はないよ。 ほんとうにこのコードで出した対応表なの?
480 名前:デフォルトの名無しさん [2009/10/23(金) 20:10:37 ] ちょっとNSScannerでやってみます >>479 その部分は手打ちなのでタイプミスしました。 ソースの方はちゃんとlongLongValueになってます
481 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 20:28:52 ] NSScannerで確かめて見たら正常に表示されました。 これに関連して、比較用のNSStringを新しくつくって、そこに元のNSStringをぶちこんで 表示させてみたら同様に正常に表示されました。何なんだろう・・・ とりあえず比較用のNSStringを作る事で対処しました。 これで比較部分がようやく安心の動きになるはず・・・ とりあえずありがとうございました!
482 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 01:24:31 ] おまえらメソッド定義の開き括弧って別の行にする派? - (id)fucknglyLongMethodNameContainingThousandsOfCharacters:bar { それともメソッド名の行にまとめる派? - (id)fucknglyLongMethodNameContainingThousandsOfCharacters:bar { あと、メソッドチェインで右の方まで来ちゃったときって、新しい行でメソッド名始めたりする? [[omgThisIsTooLongSoThatTheNextMethedHangsAtFarRightPositionWTF foo] thisIsTheSecondMethodSTFU:bar multipleArgsAnotherPain:poo]; それとも同じ行に置く? [[omgThisIsTooLongSoThatTheNextMethedHangsAtFarRightPositionWTF foo] thisIsTheSecondMethodSTFU:bar multipleArgsAnotherPain:poo];
483 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 02:17:55 ] -(void)括弧は同じ行にする { [[そんなに長いメソッド名 付けたりはしないけど] 基本的には同じ行かな]; id hoge = [コード見やすい方が気分がいいので あんまりにも右に長くなっちゃう場合は]; [hoge コードを分けちゃいますね]; }
484 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 12:50:09 ] WikipediaでCの例文見ると 関数宣言は改行で void a { } 条件式は if () { } while () { } 改行してるみたい。
485 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 13:09:58 ] >>484 Wikipediaは例として好ましくありません。 例として引用する場合は、Wikipediaが参照・参考にしている一次情報を引用しましょう。 括弧を次の行におくのはGNUコーディング規約で推奨されています。 同じ行に置く形もどこか有名な団体/企業での採用が元だったと思いますが忘れました(Sunだったかな)。 GNUコーディング規約 www.gnu.org/prep/standards/standards.html#Formatting www.sra.co.jp/wingnut/standards-j_toc.html ちなみに私は括弧は同じ行、メソッドチェインは>>483 と同様に分割を検討します。 状況によっては新しい行で開始します。同じ行には置かないでしょうね。
486 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 20:14:08 ] GNUスタイルは参考にするな、やっちゃダメな例だ Linuxコーディングスタイルがルールも少なく誰でも従いやすい でも、objc的にはAppleのコーディングスタイルをまねるのが一番いいのでは Appleなりの理由があってあのスタイルに落ち着いたんだろうから あと、Perlベストプラクティスのコーディングスタイルも学ぶところが多かった
487 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 20:24:09 ] コーディングスタイルなんて、プロジェクト内で一貫してればなんでもいいべ。
488 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 20:27:54 ] いきなりタブ・インデントは8文字とか書いてあるけど……
489 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 20:35:52 ] これか。 lxr.linux.no/linux/Documentation/CodingStyle
490 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 20:41:17 ] 基本Appleのサンプルコードを真似する形で。
491 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 04:47:35 ] ここで質問すべき事なのかよく分からないのですが、 Macのシステム終了、再起動、をするプログラムを作ろうと思ってます。 で、実装についてなんですが、よく分からないのでsystem関数で 再起動、システム終了のコマンドでも送ってみようかと思います。 shutdown -h now ですね!でもこれってrootじゃないアカウントからでも効くんでしょうか? あと、保存していないファイルとかは保存されないまま強制終了しちゃうのでしょうか?
492 名前:491 mailto:sage [2009/10/26(月) 04:51:26 ] 自分で試す気は無いのでよろしくお願いします。
493 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 06:39:57 ] >>492 自分で試せヴォケ
494 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 06:57:41 ] >>491 rootじゃなくてもだいじょうぶ
495 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 10:10:03 ] >>491 ここで質問すべきことじゃないですが、shutdown -h now だと かなり強制的に終了するのでよくないです。ファイル保存しますか? とかのダイアログも出ません。Apple おすすめの方法は developer.apple.com/mac/library/qa/qa2001/qa1134.html です。
496 名前:デフォルトの名無しさん [2009/10/27(火) 07:55:44 ] 既出かもしれんが、 foo.cppにあるint exec()って関数をbar.mのmain()から呼び出すのってなんか宣言必要なの? ldでexec()のシンボルが見つからないと言われる・・・
497 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 09:28:44 ] >>496 foo.cpp 側で extern "C" しとかんと Obj-C からは呼べないだろ、JK
498 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 21:55:28 ] >>497 Thx。やってたんだが、どうやらヘッダーファイルで宣言してたのがダメだったらしく、cppファイルに直接externしたら動いた。感謝。 原因まではおってないが‥
499 名前:デフォルトの名無しさん [2009/10/29(木) 13:23:39 ] メインスレッドから実行したスレッドAの処理が終わるまで メインスレッドを待機させるにはどう書けば良いのでしょうか。
500 名前:491 mailto:sage [2009/10/29(木) 13:33:31 ] [self performSelectorOnMainThread:<#(SEL)aSelector#> withObject:<#(id)arg#> waitUntilDone:<#(BOOL)wait#>]; じゃねーの。
501 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 13:34:15 ] 名前消し忘れてたヨ
502 名前:499 mailto:sage [2009/10/29(木) 13:36:38 ] やっぱりperformSelectorOnMainThread使わないといけないんですね。 あまりメソッド増やしたくなかっただけなんですが、どうもです。
503 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 13:54:21 ] >>502 「使わないといけない」わけじゃねーよ。 >>500 は 物知らずでも使える一番簡単な方法を提示してくれただけだろ。 文句あるなら pthread の関数とか NSCondition でも使ってろ
504 名前:デフォルトの名無しさん [2009/11/08(日) 15:04:31 ] 簡単なxmlを解析するクラスを作ってます。char型のメンバ変数を持たせたいと思ったのですが、うまくいきません。 @interface SimpleXml : NSOperation { const char *elementName; } オブジェクトの初期化のところで - (id)initWithRequest: (NSURLRequest*)request name: (NSString *)name { self = [super init]; if (self) { elementName = [name UTF8String]; } return self; } こんな風にしてみた。代入直後でNSLogするとちゃんと代入されてるのですが、実際に使いたいメソッドの中では文字化け?のようなおかしなデータになってます。 比較対象がchar*なので最終的にはchar*が欲しいです。メンバ変数をNSStringにして比較するところでUTF8Stringで変換して比較するとうまくいきます。 ただ、xmlの要素分繰り返し呼ばれる部分なので、毎回UTF8Stringを呼び出すくらいならcharで持たせちゃえと思いました。 それほどおかしなことはしてないつもりなのですが、やっぱりポインタの理解が足りてない感じでしょうか?アドバイスお願いします。
505 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 16:40:23 ] >>504 -[NSString UTF8String] のドキュメントを読みなさい。 ちゃんと注意が書いてあります。
506 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 22:17:39 ] >>504 NSXMLDocument つかえば?
507 名前:504 [2009/11/09(月) 02:02:48 ] >>505 ありがとうございます。 もとのNSStringがreleaseされた時点でfreeされちゃうんですね。 うまくできました。 ドキュメントよく読みます。
508 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 20:32:01 ] iPhoneの開発で初めてObjective-Cを使ったが、良いねこれ。 最初はメソッド呼び出しの[]がきめぇwwwwって感じだったんだが、 デフォでリフレクションできるのは良い。 C++よりこっちが普及していれば自分のプログラマ人生も幸せだったのかもしれない、 と思う今日この頃。
509 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 13:06:25 ] リフレクションって何?
510 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 13:52:19 ] RTTIのすげぇやつ
511 名前:508 mailto:sage [2009/11/10(火) 15:25:49 ] つくづく思うのがC++のvirtualってナンセンス。 id型に何でもぶちこめるのもイイ。まさかCでこんな風に扱えるとはね。 メソッドのprivate/publicの定義ができなかったり不満もあるけど。
512 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 15:31:08 ] それ、Cやない、Objective-Cや
513 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 15:45:31 ] C拡張で、ってことでは。
514 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 16:06:01 ] virtualがナンセンスだなんて思ったことないわ
515 名前:508 mailto:sage [2009/11/10(火) 16:40:25 ] スクリプト言語になれると、基本、親のメソッドはなんでも置き換えられてあたりまえという考えに。 基本クラスが違ってもメソッドの名前と引数の型が一緒なら呼べてしまうのも何気にすごい。 それに甘えて使いまくると死ぬけど。
516 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 16:58:33 ] どれもが同じ実装だったら、何も楽しくないじゃん
517 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 19:21:36 ] 既に C++ が存在しているって事は良い事だよね。 ああいうのが好きな人が楽しめる場所が別にあるから、 お互い邪魔せずに、こっちはこっちで自由にできる。 彼らはどう転んでも Smalltalk 風のオブジェクト指向を 消化できないだろうし、C++0x を見ていると、 対岸の火事で良かったなあと心から思う。
518 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 20:08:39 ] 無理して語ってる感がすごい
519 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 20:14:35 ] ん、そうか? 前世紀から何度も繰り返し語られてる話だけどな。
520 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 20:17:29 ] C++のメソッドをCの関数ポインタみたいに実行時バインドしようとすると virtualのダメさが際立つな。あれはナンセンスと思う Qtのシグナルスロットとかみたいに言語外の飛び道具が必要になるし
521 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 20:18:48 ] いろんなことを混ぜ込めて、結局は何も言ってないみたいな
522 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 20:22:27 ] 伝わる人に伝われば良いんだよ。別に説得するつもりも無いし。
523 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 20:26:00 ] いろんな言語使う人からすると実装の違いがおもしろいんだけどねえ 何か他の言語を否定しがちなのはもったいない感じがする
524 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 20:26:50 ] ObjC 一本槍な人間が居るとでも?
525 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 21:18:48 ] どんな言語にも欠点はあるし、多少叩かれてもカリカリしなくていいんじゃね
526 名前:508 mailto:sage [2009/11/11(水) 16:00:50 ] そもそもobjCってmac、iphone開発くらいにしか使わないし、 WEBプログラミングでrubyかPHPかjava、どれでやるかって話にはならないよね。 で、自分はC++に10年以上お世話になってるが、 歴3ヶ月のobjCのが言語として優れてる気がしている。 なにげに[nil method1]でぬるぽにならないのもいいな。
527 名前:デフォルトの名無しさん [2009/11/11(水) 16:08:31 ] はいはい、もういいから。
528 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 17:47:21 ] 冷たいな(´・ω・`) ObjCスレなんだから、もっと激しく愛を語ってもいいじゃないか。
529 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 18:58:09 ] 今更30年前に Smalltalk で実現されていたものについてだけ語られても反応に困る .mm で boost:python と混ぜて使うのが最強ですよとかモダンな話をしようよ
530 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 19:30:20 ] じゃあ追加して欲しい言語仕様の話でも
531 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 22:00:46 ] [hoge method1] でマルチスレッドになりますか?
532 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 22:01:49 ] 最近 object_getInstanceVariable とかを知って悶絶しそうな程展望が開いて小躍りしてます。
533 名前:デフォルトの名無しさん [2009/11/11(水) 22:50:59 ] >>531 なりません
534 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 23:17:52 ] >>532 reflection つきの オブジェクト指向言語なら出来て当たり前だろう >>531 [hoge performSelectorInBackground:@selector(method1) withObject:nil] でオッケー
535 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 00:38:16 ] 昔はこれだけで感動だった。 Smalltalk keys. Lisp だと apropos とか。
536 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 05:05:03 ] >>531 goなら可能
537 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 08:51:40 ] Smalltalk で言ったら fork メッセージだな
538 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 10:12:27 ] oneway voidなメソッドなら別スレッドで実行されてもいいよな OSXのランタイムはそういう実装にはなってないけど
539 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 12:00:19 ] >>538 APIが全て thread-safe な理想郷ならそれでもいいけど、 とつぜんあるメソッドが別スレッドで走られると困る事もあるよ 10.5 では NSOperation の concurrent オペレーションは メインスレッドで動いてたのに、10.6 からそれも別スレッドで 走るようになったので嵌まったのでそういうのはこわいです。
540 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 00:28:16 ] プロパティのデフォルトアクセサは nonatomic を指定しないかぎり スレッドセーフだから多少のオーバヘッドには目をつむって自クラス内でも インスタンス変数は常にプロパティ経由で触るみたいなスタイルが今後は 主流になるのかもね
541 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 14:03:00 ] 個々のインスタンス変数やプロパティの読み書きだけスレッドセーフにしても あんまり意味ないから、主流にはならないと思う。
542 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 17:25:51 ] iPhoneのSDKがらみの質問もここでしてよいのかな。 本体の傾きを求めるとかそういう話だが。
543 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 17:49:22 ] だめ。↓辺りでやれ、 [SDK]iPhoneアプリ開発初心者質問箱3[touch] pc11.2ch.net/test/read.cgi/mac/1254325417/
544 名前:542 mailto:sage [2009/11/19(木) 18:49:07 ] mac板にあったんだ、iphoneじゃなくて・・・どもです
545 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 20:36:11 ] ブロック構文ってなんじゃらほい。
546 名前:デフォルトの名無しさん [2009/11/21(土) 20:37:49 ] www.nogawasakura.net/
547 名前:デフォルトの名無しさん [2009/11/22(日) 21:09:36 ] NSStringの文字列"0"をASCIIコード10進数の48に変換するにはどう書けば良いのでしょうか?
548 名前:547 mailto:sage [2009/11/22(日) 22:30:21 ] すいません、間違えました。 ASCIIコードの48をcharもしくはNSStringの0に変換するには どう書けば良いのでしょうか。
549 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 22:34:08 ] なんだこのゴミは
550 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 02:56:15 ] >>549 まあまあ。将来有望な小学生が来たのかもしれんじゃないか。 >>548 で、その48は何で表されてんのかな?
551 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 04:40:12 ] char c[128]={0}; c[0] = 48; sprintf(c, "%c", 48); NSString *nss = [[NSString alloc] initWithFormat:@"%c", 48];
552 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 06:05:21 ] >>551 オイコラ、char c[128]ってどういうつもりだ。これだから最近の若いもんは・・・。
553 名前:デフォルトの名無しさん [2009/11/23(月) 06:29:27 ] >>552 えっ、何かマズいっすかね・・・ 自分まだ初めて2ヶ月くらいなんです・・・
554 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 07:34:23 ] Mac関連スレってどこも変な物言いのおっさんばっかりなんだよな
555 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 08:34:48 ] >>553 >>551 の2行目のようにchar型のデータが欲しいだけなら何もすることは無いので char c; c = 48; で十分だ。 もし3行目のように文字列として扱いたい場合でも今の場合なら一文字目 '0' == 48 と二文字目の '\0' の分だけなので char c[2]; でよい。 それにchar c[2] = {0} のように書いた場合、2要素目以降は言語仕様上不定(実装上はほぼ確実に0にセットされるが)。
556 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 08:36:27 ] なんだそんな話か char c[4096]; とか平気でやってるぞ
557 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 09:17:42 ] なんと愚かな!
558 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 10:41:38 ] >>555 なーるほど。そういうことなら問題なっすぃん。 なんか48 61 65 71みたいな数値を文字列に直すのかなーとか思って多めにとっただけっすぃん。
559 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 11:04:11 ] >555 悪意がないことを先にいっておく >char c[2] = {0} のように書いた場合、2要素目以降は言語仕様上不定 なる理由はどこから 気になったので、規格書があればそのセクションをお願いします
560 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 11:54:05 ] >>559 俺も気になったんで見たんだけど、 C99?だと、静的変数と同様の暗黙の初期化になるみたい。 それ以前のは規格書が見れない。 www.jisc.go.jp/ JISX3010のPDF96ページ辺り。
561 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 12:36:40 ] >560 確認しました 確かに静的記憶域と同じと書いてありますね
562 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 15:43:49 ] American National Standard Programming Language C 3.5.7 Initialization Semantics If there are fewer initializers in a list than there are members of an aggregate, the remainder of the aggregate shall be initialized implicitly the same as objects that have static storage duration.
563 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 14:02:14 ] おまいら静的変数と同じとか遠回しなこと言ってないで、 >>555 は間違いで char c[2] = {0}の様に書いた場合 2 要素目以降は c 言語の 仕様として 0 にセットされる、とストレートに指摘しろyo
564 名前:555 mailto:sage [2009/11/25(水) 03:10:05 ] いい加減なことをいってスマンカッタ。 ヽ(`Д´)ノ ウワァァァン そんなこと言ったら厳密なObjective-Cの規格書なんて無いんだよう(グチグチ
565 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 03:10:53 ] 往生際悪すぎ
566 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 00:04:19 ] とはいえ、身を委ねたくはない仕様だな。 明示的に初期化しておきたい。
567 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 00:30:36 ] 明示的に bzero() とか memset() すると冗長だと言って怒る人もいる(いた)から難しいね…
568 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 15:41:30 ] こんな基本的な仕様を信用できないなら、ただの代入とかも信用ならんし 関数呼び出しなんて高度なものは余計使えないんじゃないか?
569 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 18:26:21 ] コンパイラにバグがあったりするんだよ そういう経験から、冗長かどうかはともかく おまじないとして書いている処理というのはある
570 名前:デフォルトの名無しさん [2009/11/26(木) 18:28:35 ] 信用うんぬんじゃなくて、知らん人が多くて話がややこしくなるからだろ みんな知ってりゃいいが >>567 みたいな理不尽なツッコミもありそうだし、 この流れみたいに話がこじれたらかなわん
571 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 20:48:17 ] じゃ信用できるコンパイラ先輩が作ってくださいよwwwwww ってやる夫顔で言ってやればいいんだよ
572 名前:デフォルトの名無しさん [2009/11/27(金) 10:52:05 ] クラス名からそのクラスのインスタンスを生成するにはどうするんでしょうか? クラスオブジェクトの生成は結構見つかるんですけど、 Class cls = NSClassFromString(@"anyClassName"); クラスのインスタンス自体を生成するやり方を教えてください。 出来ない言語もあるけど、objective-cはいかにも出来そうですよね? お願いします
573 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 10:54:21 ] そこまで来てればあとはコンドーム一枚だぞ
574 名前:572 [2009/11/27(金) 11:05:28 ] >>573 あれ?もしかして id obj = [[cls alloc] init]; でいいんですか? NSLogでのぞくと出来てるっぽいです。 class_createInstanceというのも見つけたけど上ので良いのかな。
575 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 13:05:20 ] いいんです。
576 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 13:57:42 ] こんなのも Class class = NSClassFromString(@"AnClass"); SEL sel = NSSelectorFromString(@"aSelector"); id obj = [[[class alloc] init] autorelease]; [obj performSelector:sel]; プラグイン書くときはNSClassFromStringは便利だよね。 わざわざバンドルローダー指定する必要ないし。 NSSelectorFromStringの方はごくまれにしか使わないね。 AppleEventDispatchの実装部では使いまくってそうだけど。
577 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 16:21:30 ] newとallocの違いが今イチ分からん。
578 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 17:30:29 ] >>577 俺も俺も てか乳って使ったことない。
579 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 00:03:58 ] +newは+alloc -initと同義
580 名前:デフォルトの名無しさん [2009/12/01(火) 18:38:18 ] typedef enum {a,b} defA; といった宣言をヘッダに記述し、これを他のクラスからimportして defA a; のように利用しようとすると、 "expected specifier-qualifier-list before 'c'"とエラーが 起きてしまいます。 どのように定義すれば良いのでしょうか。
581 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 18:43:26 ] enum { a, b, }; typedef NSInteger defA;
582 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 19:24:09 ] >>580 ソース
583 名前:580 mailto:sage [2009/12/01(火) 20:55:30 ] すいませんちょう単純な勘違いしてました。 他のヘッダが邪魔をしていて、importの前に書いたらうごきました。。
584 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 23:11:37 ] Objective-Cって、メソッド名ひとつ考えるのにも英語力を要求してくるな。 こりゃ、そんじょそこらのなんちゃってプログラマに扱えるしろものじゃねーな。
585 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 00:29:56 ] なんちゃってプログラマでも簡単に使えるよ。英語さえわかれば。
586 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 00:50:29 ] >>584 別に日本語ローマ字書きでもいいじゃん
587 名前:デフォルトの名無しさん [2009/12/02(水) 04:06:03 ] 辞書が存在していない時代だったらそう言えるかもしれないね。
588 名前:デフォルトの名無しさん [2009/12/02(水) 05:26:27 ] 辞書の歴史は紙の歴史より古いからなあ。
589 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 19:58:30 ] DataWoTuika:id KonoIchini:idx omake:option
590 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 20:46:14 ] 引数がkonochincoとomekoに見える
591 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 21:10:19 ] けしからん奴じゃ
592 名前:デフォルトの名無しさん [2009/12/03(木) 19:40:15 ] NSStringにHTMLのソースが入ってるんですけど、 そこから<li>〜</li>の部分だけ抜き出したいと考えています。 ただ、それをどうやって実装すればいいのかが良く分からないです・・・。 今頭の中にある感じだと、<li>とマッチする最初の場所と </li>とマッチする最後の場所を探して、その部分を抜き出すという方法なんですけど、 もっと簡単に正規表現みたいな感じでピュッと抜き出したりできないでしょうか?
593 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 20:19:18 ] Google Toolbox for Mac の GTMRegex でも使え。
594 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 21:59:37 ] まさかiPhone初心者スレで聞いてたやつじゃねーだろうな
595 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 22:07:13 ] >>592 とりあえず簡単にやるならスキャナ使えば? NSString *hoge = "hoge <ol><li>foo</li><li>bar</li></ol>"; NSScaner *scanner = [NSScanner scannerWithString:hoge]; while (YES) { NSString* itemString; if (![scanner scanUpToString:@"<li>" intoString:NULL]) break; if (![scanner scanUpToString:@"</li>" intoString:&itemString]) break; NSLog(@"item = %@",itemString); }
596 名前:デフォルトの名無しさん [2009/12/04(金) 00:52:37 ] >>592 NSXML 使って XPath でピョッと
597 名前:デフォルトの名無しさん [2009/12/05(土) 22:45:14 ] なんか、releaseしなきゃならん場合としないでいい場合の違いが良くわからんわ。 本のサンプルとかみても、retainしてるのに、どこにもreleaseがなかったり、allocして autoreleaseも呼んでるのに、deallocでreleaseもしてたりとか、もうわけわかめ。 なんじゃこりゃ、そんなに神経質にならなくてもいいのか?
598 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 23:07:44 ] カウンタ使ってメモリ管理するなら当然覚えないと、意味不明なバグに遭遇することしきり。 自分は Instruments の Leaks 使って、可視化されたメモリリークを見ながら試行錯誤して覚えたけど。
599 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 23:09:06 ] あと初心者は Build & 解析はかなり役に立つんじゃ。
600 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 03:36:39 ] まずは developer.apple.com/jp/documentation/cocoa/Conceptual/ObjectiveC/4objc_runtime_overview/chapter_8_section_2.html を読まんといかんよ。 iPhone じゃなくて Mac のプログラムならガーベジコレクション ON にして retain/release 忘れるという方法もあります。 ただ、 >サンプルとかみても、retainしてるのに、どこにもreleaseがなかったり、allocして >autoreleaseも呼んでるのに、deallocでreleaseもしてたりとか、もうわけわかめ。 これは本が間違ってるんじゃないの?何の本かわからんから何とも言えんが。
601 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 06:55:11 ] >>597 そんな本あるなら晒してみろよ
602 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 13:36:42 ] 初期化するインスタンスメソッドの他に、勝手にAutoreleaseするクラスメソッドも あったりするからちょっとややこしい。
603 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 13:45:34 ] (あるクラスの init メソッド内で、インスタンス変数に代入するオブジェクトを)retainしてるのに、 (init 内の)どこにもreleaseがなかったり、 (そのクラスを)allocして autoreleaseも呼んでるのに、 (そのクラスの)deallocで(インスタンス変数を)releaseもしてたり と解釈するとしたら、まったく正しいコードけど
604 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 13:53:05 ] >>601 サンプルはあくまでサンプル。アプリまるごと完全詳解みたいのならともかく。 Obj-Cに限らず、その他言語のO'Reilly本やMSDNでも、 サンプルソースと現実的に推奨されるソースは異なる場合は多い。 参照カウンタの説明でretainしたものをreleaseしてないなら問題だと思うけど、 多分、別の説明で使用されているサンプルがそうなってるんでしょ。 >>602 >勝手にAutoreleaseするクラスメソッド コンビニエンスコンストラクタのこと?
605 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 14:10:04 ] >>604 あぁ多分それ 俺もこの辺、よく迷うわ。propertyの宣下にもretainやassignの指定があるから、 宣言をよく確かめて使わないとかいけないとか気を使うのがちょっと大変。 便乗質問なんだけど、あるクラス(A)で動的にView(B)を作って(alloc & init)、 別のView(C)にaddSubView した場合って、Aで明示的にBをreleaseする必要 があるんだっけ? それとも、Cの解放時にBも勝手にreleaseしてくれる?
606 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 15:11:08 ] 当然あるよ。
607 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 15:34:14 ] >>606 何が当然あるか? Aで明示的にBをreleaseする必要があるという意味あるか?
608 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 15:47:51 ] ないあるよ
609 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 16:09:08 ] hoge = [[Hoge alloc] init]; // 1 [foo addHoge : hoge]; // 2 … [foo release]; // 1 よってメモリリークになる。 だから、autorelease か add 後に [hoge release]; の必要がある、筈。
610 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 16:37:49 ] わかったある。謝謝
611 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 21:00:38 ] >>609 エ?こうしとけばリークにならねえだろ? -(void)dealloc { ... [mHoge release]; // 0 mHoge = nil; ... [super dealloc]; }
612 名前:デフォルトの名無しさん [2009/12/06(日) 21:02:19 ] そうか?
613 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 21:17:35 ] そのdeallocは何をトリガーにして呼ばれるんだっちゅう
614 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 22:15:11 ] >>611 だから、>>609 はそうしろって書いてるじゃん
615 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 22:25:14 ] 自分が 609 だけど、foo が dealloc 時に hoge をリリースするのは、 addHoge: (addSubView:)には retain されてるから当然。 でもそれだと±1で、Hoge alloc init 時のカウント1をリリースされてないから、リークになる。
616 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 22:44:59 ] まぁ、init時にautoreleaseつけとくのが無難かな
617 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 00:14:08 ] 無難とかそういう問題ではなかろう。
618 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 00:45:02 ] >602 >605 initほげほげ、copyほげほげ は retain されて、 それ以外のメソッドは autorelease されたのが返ってくる。 [obj method:a] としたばあいに、obj が a がずっと必要なら method 内部で retain するし、 いらなかったらそんなことはしない だから、自分があるオブジェクト a を release すべきかどうかは、 自分が呼んだメソッド内でどうなっているかとかは気にしなくてよくて、 単に自分がいらなくなった時点で release すればよい。 まあリリース足りなければメモリ食うだけだけど、 リリースしすぎは一瞬でクラッシュするので、 きちんと理解して書くか、NSZombie でチェックするか、 release しすぎないようにしてください。
619 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 01:19:21 ] ウィーッス
620 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 13:31:55 ] >>618 newほげほげも忘れないであげてください
621 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 17:53:50 ] 雑談はスレチだよね。チラ裏すまん。 Objective-Cのオブジェクトの所有権ポリシーって、 (C++におけるメモリ管理と)やることは本質的に同じでありつつ 保守効率が格段に上がる優れた機構ではあるとは思うけど、 Objective-Cってどんなもんだろってちょっとイジってオナりたいとき、 一通り理解するまでとっかかりで苦労するねぇ。 C++慣れしてると、余計なお世話に感じてしまうっていうか。 なんだか好きになれない。
622 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 17:59:43 ] まあ、今はGCがあるし
623 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 20:34:51 ] iPhoneではGCが使えないらしい...ゾ
624 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 22:15:56 ] Objective-Cのメモリ管理3原則 1. alloc,copy,retain,newしたインスタンスはreleaseする必要あり 2. 1した覚えの無いインスタンスは勝手にrelesaeしてはいけない 3. 1してないインスタンスはどこかでreleaseされるので、保持したい場合はretainかcopy
625 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 22:28:22 ] add したら直ぐ release して良いのかと思ってたら、そうじゃないんだね
626 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 00:43:52 ] >>621 オブジェクトプール+手動の参照カウントってのは、大昔の手法だよ。 人頼みだとバグが多くなるし、保守効率も下がる。だからメモリ管理コードを 一々書かなくて済むGCやスマートポインタが主流になってる。 模したSmalltalkみたいに最初からGC付きなら無かった機構だから>>622 が正解
627 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 09:22:55 ] でも、iPhoneがGCは無効なんでしょう? ここにいる皆さんは、GC派とリファレンスカウンタ派、どちらが多いのでしょうか?
628 名前:621 mailto:sage [2009/12/08(火) 11:17:45 ] あ、すみません、iPhoneアプリ開発でObjective-C処女喪失したもので。 iPhoneはGC無いです。 (ただ、あったとしてもiPhoneはメモリ極小なので、autoreleaseさえ極力避けるべきと公式で指摘されています。) >>624 の規則だけですが、解れば便利な@propertyと@synthesizeも、 とりあえずちょっとイジってみようレベルの初見だと、 iPhone画面にHelloWorld表示するだけのソースすら、 「@property(nonatomic,retain)何この呪文、この入門書じゃソース解説にも記述無いし、 とりあえず詳細確認は後だな...あれ??実装でretainなんてしてなくね??なんで?? (ポチッ)ちょww動いたwwwけどHelloWorldのソースすらイミフwwww」 みたいな。 結局、入門書はHelloWorldで挫折、とりあえずちょっとイジるだけのつもりが、 公式ドキュメントを片っ端から読み漁って十分理解してから、 入門書のHelloWorldのソースを見直したのはいい思い出。。。 チラ裏に長文、本当にスマンかった。 最後に、InterfaceBuilderについて。 見た目だけでVB.NETくらい優しいお母さん的IDEだろうと思って触ると、火傷するね。
629 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 12:10:55 ] iPhone だと Hello World 如きに property つかわにゃならん訳?
630 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 13:16:01 ] >>628 なんの入門書を読んだか知らんが、それはその入門書があきらかに悪いな iPhone でプログラムやるには、 (古めかしいとか批判はいろいろあるかもしれないが、実際問題として) retain/release ができなきゃ話にならない。 わかったつもりで通過すると絶対に意味不明なクラッシュをはじめて あとで泣く羽目になるのに、説明しないなんてありえない。 とにかく変な入門書を掴んで失敗でしたね。 あなたが公式ドキュメント読める人で良かったですが。 あと、Interface Builder はふつうの(?)と違って、 コントロールダブルクリックしてもメソッド追加できないので、 その辺戸惑うかも知れませんが、ビューとコントローラの独立性が 自然に高まるようになってるのはいいところだと思います。 .Net やさんで iPhone プログラムはじめたひとはみんな そう感じるみたいね。 dotnetaddict.dotnetdevelopersjournal.com/dcacs.htm とか。
631 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 18:47:31 ] 今更だけど、 > オープンソースの現状について、おそらくは予想外の知られざる事実を明らかにした。 > 『Smalltalk』対『Objective-C』では? Smalltalk がほぼ3倍のコード量で勝利している。 japan.internet.com/webtech/20090724/12.html オープンソースの括りだから負けただけだよな?
632 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 12:41:07 ] >>629 いらないよ。コードなんて1行も書かなくてもHello Worldって表示するぐらいはできる。 完全に入門書が悪いわ。アップルの配布してるPDFのほうが数倍マシ。
633 名前:デフォルトの名無しさん [2009/12/09(水) 22:34:49 ] NSURLでwww.xxx.com/foo/boo/index.html のようなURLから index.htmlを抜き取るようなメソッドってないですかね? スキームやホスト、アンカーなどを返すメソッドは見つかったのですが、 ファイル名を返すのが見つからないです・・・
634 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 23:02:12 ] NSString (NSStringPathExtensions) の - (NSString *)lastPathComponent; でも使え。NSPathUtilities.h に定義されてる。
635 名前:デフォルトの名無しさん [2009/12/09(水) 23:13:06 ] >>634 ありがとうございます。 こんな便利なのがあったんですね。 というか、NSURLにもこのメソッドつけてほしいですねw
636 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 23:14:08 ] 10.6にはついてるみたいよ。
637 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 23:25:55 ] ほんとだ。 - (NSString *)lastPathComponent AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER;
638 名前:デフォルトの名無しさん [2009/12/14(月) 01:49:22 ] NSStringをURLエンコーディングしたいと考えています。 例えば てすと → %A4%C6%A4%B9%A4%C8 のようにしたいのですが NSString *test = @"てすと"; [test stringByAddingPercentEscapesUsingEncoding:NSShiftJISStringEncoding]; NSLog(test); のようにしても、 8C48B78C6 のように表示されてしまいます。これを%A4%C6%A4%B9%A4%C8のように表示するにはどうすればいいのでしょうか?
639 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 01:58:22 ] NSLogが%をフォーマット文字と解釈して表示しちゃうせいだから気にしない
640 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 02:00:28 ] 1. ソースコード内に日本語文字列 @"にほんご" を書かない。 それによって出来た文字列がどうなるかの動作は未定義です! (うまくうごくときもあるかもしれませんが、コンパイラのデフォルト設定が 次のバージョンでかわると一瞬でおかしくなる可能性があります。) 必ず Localizable.strings を使うようにしてください。 2. NSLog(test) というふうに書かない!NSLog の第一引数は フォーマット文字列です。% があるとフォーマット指示だと解釈されます。 NSString* test = @"%@"; NSLog(test); とすると、NSLog は %@ をフォーマットと解釈するために スタック上に偶然あるポインタの先のオブジェクトっぽいものにアクセスして 異常終了しますよ! 必ず NSLog(@"%@", test) としてください。
641 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 02:02:39 ] NSString *test = @"てすと"; NSLog(@"%@", [test stringByAddingPercentEscapesUsingEncoding:NSShiftJISStringEncoding]); 2009-12-14 02:01:53.361 test[1467:a0f] %82%C4%82%B7%82%C6
642 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 02:03:33 ] なるほどなるほど、勉強になります。 ちゃんと表記したらちゃんと表示されました。 今まで面倒くさがってNSLog(NSString変数)みたいに書いてましたが 今度からちゃんと書こうと思います。ありがとうございました。
643 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 02:09:44 ] >>640 いつもの人乙
644 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 02:20:58 ] >>640 1. だけど、 developer.apple.com/Mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocLanguageSummary.html によると、10.5 からは UTF-16 の文字列も大丈夫って書いてあるよ。 ただ、C のソースコードを何のエンコーディングで保存しているかと、 gcc の -fexec-charset, -finput-charset の設定によるので、 developer.apple.com/mac/library/documentation/DeveloperTools/gcc-4.2.1/gcc/Preprocessor-Options.html 僕は @"にほんご"は怖くて使う気になりませんが。
645 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 02:24:31 ] >>638 というか URL のエンコーディングって ShiftJIS でいいんだっけ? 最近って真っ当なサイトなら UTF-8 じゃない? Wikipedia とか。
646 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 02:26:25 ] RFCではUTF-8である"べき"とされているな
647 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 10:11:57 ] 10.5と10.6は、@"にほんご"は普通に使えてるなぁ。 ソースコードはデフォルトのままUTF-8。
648 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 01:41:01 ] KVC で質問があります。class_addMethod で追加したセッタ、ゲッタが valueForKey: から呼ばれないんですが、なぜでしょう?そういうもの? サンプルコードは以下のとおりです (Obj-C 2 です) #import <Foundation/Foundation.h> #import <objc/runtime.h> @interface Aho:NSObject { } @property(retain) NSString*foo; @end @implementation Aho -(id)getter { NSLog(@"getter:%@",NSStringFromSelector(_cmd)); } -(void)setter:(id)obj { NSLog(@"setter:%@,%@",NSStringFromSelector(_cmd),obj); }
649 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 01:41:49 ] +(void)synthesizeSetterGetter:(NSString*)getterName { NSString*setterName=[NSString stringWithFormat:@"set%@%@:",[[getterName substringToIndex:1] uppercaseString],[getterName substringFromIndex:1]]; IMP getter=class_getMethodImplementation(self, @selector(getter)); class_addMethod(self, NSSelectorFromString(getterName), getter, "@:"); IMP setter=class_getMethodImplementation(self, @selector(setter:)); class_addMethod(self, NSSelectorFromString(setterName), setter, "@:@"); } +(void)load { [self synthesizeSetterGetter:@"foo"]; } @dynamic foo; @end int main(){ NSAutoreleasePool*pool=[[NSAutoreleasePool alloc] init]; Aho*aho=[[Aho alloc] init]; [aho foo]; [aho setFoo:@"bar"]; [aho valueForKey:@"foo"]; // ここで例外がでる [aho setValue:@"bar" forKey:@"foo"]; return 0; }
650 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 02:51:37 ] valueForKey: はまずアクセサを探すはずなのにおかしいね。 @synthesize foo; やって、 method_exchangeImplementations(class_getInstanceMethod(self, @selector(foo)), class_getInstanceMethod(self, @selector(getter))); method_exchangeImplementations(class_getInstanceMethod(self, @selector(setFoo:)), class_getInstanceMethod(self, @selector(setter:))); とかやるとちゃんと機能したけど、それは君の望むことじゃないか。
651 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 10:25:12 ] class_addMethod(cls, sel, imp, types) の中の、types が間違ってるから。 typese は(リファレンスで確認してね)、"返り値", "self", "_cmd", "引数..." なので、 class_addMethod(self, NSSelectorFromString(getterName), getter, "@@:"); // ×"@:" class_addMethod(self, NSSelectorFromString(setterName), setter, "v@:@"); // ×"@:@" とやると動く。
652 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 10:38:59 ] ついでに。+load で +synthesizeSetterGetter: を呼ぶとNSAutoreleasePoolがまだ できてないタイミングなので、コンビニエンスコンストラクタを使うとリークする。 setterName = [NSString stringWithFormat:..]; の所。alloc + init + release を 使おう。それか、+load でやる代わりに +initialize で呼ぶとpoolが出来た後なので コンビニエンスコンストラクタが使える。(分かった上でのサンプルならごめんよ)
653 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 11:41:32 ] みなさんありがとうございます、 おかげでうまく行きました。 型のエンコーディングをわかってませんでした。 Pool の件もどうもです。まあ数個ぐらい リークしてもよかんべ という気持ちでしたが、いけませんね。 type encoding は method_getTypeEncoding をつかった方がいいとも 職場で教えてもらいました... マルチポストみたいになってすみません。
654 名前:572 [2009/12/19(土) 15:58:57 ] 質問させてください 中にNSMutableDictionaryのインスタンスを持っている独自クラスがあって その中にどんなキーがあるかは不定です。 でそのインスタンスに対して hoge.foo のようにドットでプロパティを呼び出してNSMutableDictionaryのobjectForKeyにアクセスするようなことって出来ますか? 不定じゃなければそういうプロパティを作ってアクセッサを定義してやればイケそうな気もするけど・・ プロパティはコンパイル時の型チェックがあるのでダメそうな気がするんですが、見逃してることがあったら教えてください。
655 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 16:53:38 ] できます。コンパイル時にウォーニングはどうしてもでるとおもいますが。 a.foo=b は[a setFoo:b] と、 b=a.foo はb=[a foo] と等価なので、 [a foo] をダイナミックに [a objectForKey:@"foo"] にかえてやればいいですが、 それには forwardInvocation: を使えばいいです。 www.mikeash.com/?page=pyblog/friday-qa-2009-03-27-objective-c-message-forwarding.html とか参照。
656 名前:デフォルトの名無しさん [2009/12/20(日) 01:04:58 ] NSStringの中にxxx:yyyみたいな文字列が入ってます。 これからxxx、またはyyyを返すようなメソッドってないでしょうか? xxxの中には:は含まれず、yyyの中には:が含まれている可能性があります。 要するの最初のコロンと、それ以降に文字を分けたいのです。
657 名前:デフォルトの名無しさん [2009/12/20(日) 01:18:01 ] rangeOfRegexとsubstringWithRangeでどうにかしました・・・
658 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 01:19:11 ] NSScanner でググると良い
659 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 06:50:02 ] >>658 で?
660 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 07:18:18 ] >656-657と>659って同一人物なのか? 俺も普通にNSScannerでがりがりマッチング取ればいいだけ だと思うんだが。
661 名前:デフォルトの名無しさん [2009/12/20(日) 11:48:34 ] >>660 いえ、同一人物じゃないですw 回答くれた人にそんな失礼な返事しないですよw NSScanner使ったことないので、調べてきます。 Objective-Cというかオブジェクティブ志向のプログラミングは初めて間もないんですが、 結構クラス調べるのは楽しいですね。もっといっぱい知りたい・・・
662 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 12:01:08 ] いいのかい? 俺はノンケでも構わず食っちまう男なんだぜ
663 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 12:17:39 ] いいよ
664 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 17:13:00 ] >>661 NSScanner でももちろん出来るけど、その目的ならNSString の -(NSArray*)componentsSeparatedByString:(NSString*)separator でやる方が楽かと。後ろは、NSArray の -(NSArray*)subArrayWithRange:(NSRange)range で取り出して、 -(NSString*)componentsJoinedByString:(NSString*)separator で戻してやればいい。
665 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 22:04:58 ] >>655 メッセージ式で呼び出すときはウォーニングだけで済むと思うけど、プロパティ構文は静的に解決できないとエラーになると思う。だから、プロパティでやるのは無理なんじゃないかな。メッセージ式で書けばいい話だが。
666 名前:654 [2009/12/20(日) 22:36:59 ] >>655 ありがとうございます 遅レスすいません 別のところ(C言語で文字列の置換)でつまっていて、詳しくテストしてない状況です。ウォーニングはでるけどできるってことですね。試してみます。 リンク先も見てみます。ありがとうございます
667 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 22:46:44 ] キー値コーディングってどんなケースで使うんですかねぇ。 なんか普通のアプリで積極的に使う場面って想像つかないんですけど。 フレームワークの開発とかで使うのかな。
668 名前:デフォルトの名無しさん [2009/12/21(月) 23:13:04 ] 次の人が答えます
669 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 23:14:48 ] KVC はそれほど自分で直接呼ぶもんじゃないと思いますが、 Cocoa のいろんな部分 (KVO,バインディング) でランタイムが統一的に オブジェクトを弄れるための下支えになってます 例えば、ソースコードで -foo と -setFoo: を定義しておくと nib ファイルの中からビューをコントローラのキー foo に バインドできますが、その間の通信は KVC でやってるわけです。
670 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 23:24:18 ] >>667 値が変更された通知が欲しいときに色々と使えるだろ。 たとえば、テキストフィールドが編集されたときに何かをしてみたり。 それから、特定のスクリプトを処理するときに、コードがかなり短くなる。 たとえば、自力でXMLをパースする、みたいなときは、大幅にソースが簡単になる。 まぁ、まずは日本語ドキュメントでも読め。 developer.apple.com/jp/documentation/Cocoa/Conceptual/KeyValueCoding/
671 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 23:31:30 ] 結構奥が深そうですね...ちょっとずづでも探ってみまする。
672 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 23:32:42 ] >>667 一々 IBOutlet と Action をおいてセッターとゲッターを作るより、Interface Builder でどうこう出来る分生産性が上がる。
673 名前:デフォルトの名無しさん [2009/12/22(火) 22:36:38 ] すみませんが、質問になります。 Objective-CからCのqsortを呼ぶ事ってできるのでしょうか? 第4引数をどうすればよいのか、途方にくれてます。 よろしくお願いします。
674 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 22:57:53 ] Cそのまんまだろ。それとも オブジェクトのメソッドでも突っ込む気か? その場合は関数でラッパーすれば良いだけだけど。
675 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 23:18:33 ] qsort_b って関数もあるぞ
676 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 23:52:54 ] >>673 C の配列をソートするのなら、C そのままでしょ。 Objective-C のオブジェクトは、C配列にいれないほうがいいです。 NSString* a[10]; とか余程でなければ誰も使わないと思います... よね。 NSArray つかって、ソートするときは、 sortedArray... とかいうメソッドが一杯あるので。
677 名前:デフォルトの名無しさん [2009/12/22(火) 23:58:01 ] >>674 ありがとうございます。そのまんまなんですね。 関数へのポインタを@selectorでとかやってたら、混乱してしまいました。 >>676 そうですか。Objective-Cが独特なんで、なるべく標準を使いたいと思ったりするんですけど、 やっぱり駄目ですかねー。
678 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 00:03:51 ] IMP とかそこら辺を学ぶと幸せになれるかも。
679 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 00:06:47 ] iPhone様々ですか?
680 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 00:08:51 ] >>877 Objective-C は C のスーパーセットだから。 C++ だって C でできる事はそのまま何でも出来るでしょ。 >そうですか。Objective-Cが独特なんで、なるべく標準を使いたいと思ったりするんですけど、やっぱり駄目ですかねー。 う〜ん、他の環境から Mac へ GUI だけ移植してるんなら、そういうのも判らなくないですが、 Mac / iPhone 用に一から書いてるなら諦めて Cocoa の使い方覚えたほうがいいと思います。 どうせ method の引数に文字列なら NSString, 配列なら NSArray を渡さないといけない事が しばしばあるので、どうせ使い方覚えないといけなくなりますし。
681 名前:654 [2009/12/24(木) 02:08:22 ] すいません。すれ違いなんですけど, 多分ここの人が詳しそうなんで、質問させてください。 xcodeでC言語の勉強をしてて、日本語の処理でつまったので教えてください。 #include <wchar.h> int main(void) { wchar_t str[] = L"日本語だよ"; printf("%s\n", str); printf("%S\n", str); printf("%c\n", str); printf("%C\n", str); wprintf(L"%s\n", str); wprintf(L"%S\n", str); wprintf(L"%c\n", str); wprintf(L"%C\n", str); return 0; }printfでマルチバイトのも文字列をあつかうにはどうすれば良いのでしょうか?上のコードは全部文字化けか出力できませんでした。xcodeのコンパイラって基本的にはgccなんですよね?その辺の情報を調べて上のように試してみたんですけど。 基本的にはNSStringをつかうので必要ないといわれればそれまでなのですが。 お願いいたします
682 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 04:05:53 ] なんでココなんだよ。 自分でスレ違いって分かってるんだからC言語のスレ行けよw そっちじゃいけない理由でもあるのか?
683 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 07:43:02 ] gcc の設定の問題で、Obj-C とも Mac と関係ない話だから、適切なところへ行ってくれ
684 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 12:58:46 ] はあ・・・低能さんって・・・
685 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 20:32:37 ] なんだか文法がいちいち長ったらしくて萎えるんですけど.. 文字列比較すんのに if ([a compare:b] != NSOrderedAscending) { : } とか、めんどくせーし、英語に慣れてないとぱっとみどう比較してんのかわからんちゅーの。 VBだったら if a >= b then : end if ちょーシンプル。ほんと萎えるよ。英語が分る人には読み易いのかもしんないけどさ。はぁ...挫折しそ
686 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 20:45:32 ] >>685 そのVBの記述だとエンコーディング考慮出来ないじゃんw C Stringで出来る所はそうすればいいし。そうでないところは Foundationでやればいい。どちらも取れるんだから。
687 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 02:16:37 ] >>685 英語の勉強になると思って頑張ってください。 物事こころの持ちようですよ。 挫折したければ挫折しても良いんだし。
688 名前:デフォルトの名無しさん [2010/01/11(月) 16:13:44 ] 例えばオブジェクトAがあるオブジェクトBを中で生成(alloc)して帰す場合、そのオブジェクトBをreleaseするのはオブジェクトAの責任なんですよね? で、そのオブジェクトBを配列で返すようなメソッドを書く場合 return [[NSArray alloc] initWithObjects:objectB, nil]; としてしまうと、だれが、このNSArrayをreleaseするのかってなっちゃいますよね? つまり、この場合NSArrayもオブジェクトAのメンバ変数に保持しないといけないってことでしょうか?
689 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 18:31:22 ] つ autorelease
690 名前:デフォルトの名無しさん [2010/01/14(木) 19:55:11 ] return [[[NSArray alloc] initWithObjects:objevtB, nil] autorelease]; とするか、 return [NSArray arrayWithObjects:objectB, nil]; とすべき。
691 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 08:48:56 ] 関係ないけど、s無し単数形の -[NSArray initWithObject:]もあるよ。
692 名前:デフォルトの名無しさん [2010/01/16(土) 21:17:35 ] 最近 Objective-C 2.0 を始めたんですが、ガベコレについて質問です。 ガベコレって retainCount が 0 になったインスタンスを自動的に解放してくれるだけで、 retain, release によるメモリ管理は必要なんですよね? NSAutoReleasePool でメモリ管理をしないでよくなった、という理解で良いでしょうか。
693 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 21:35:39 ] 全然違う。 ルートとなるNSAppから芋づる式に参照されてる(到達可能な)オブジェクトを保持し、 関連が無くなったオブジェクトを自動的に始末するシステムです。 journal.mycom.co.jp/special/2007/objectivec/002.html 参照カウントは使ってない。
694 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 21:39:39 ] C++は0xとか模索されてて鋭意進化中だけど、Objective-C は 3.0 が出来るとしたら、どんな拡張になるのかな?
695 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 22:34:26 ] 特にこれといって欲しい機能もないしなあ。 名前空間くらいか。
696 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:17:01 ] 無名関数、ラムダ式、ジェネリックは欲しい。 ちゅうかC++ 0x のコンパイラなんぞ実装するベンダーあるのかね。 IDE込みで考えると、かなり大変そうだけ。
697 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:21:47 ] 詳しくは知らんのだが、ブロック構文はラムダ式の代わりにはならんの?
698 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:27:04 ] >>696 >無名関数、ラムダ式、 無名関数とラムダって違うの? Blocks のクロージャじゃダメなの?
699 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:48:20 ] クロージャなんてものがあるのか。知らなかった。これ使いまくろ。
700 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:52:45 ] >>696 >ジェネリック 動的束縛な言語にジェネリックって必要か?
701 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:55:07 ] ジェネリック・プログラミングも、カテゴリを利用して出来るんじゃないの?
702 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:55:52 ] Blocksなんて機能あったんだ? 荻原本にも書いてないやんけ!
703 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:59:03 ] Dyna本にも書いてないよな、何故か知らないけど。
704 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 06:02:50 ] 本にのってないのは、block は snow leopard からの機能だからでしょ。 Objective-C の拡張というよりは C そのものの拡張という 位置づけにしたいらしいよ、Apple は。 まあ多分ほかにどこも採用しないから、 実質 Objective-C の機能という認識になるとおもわれるが...
705 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 12:29:38 ] >696 フル実装はしばらくかかるかもしれないけど gcc も VC も既に機能の取り込みを始めてるし、 C99 と比べれば段違いだと思われ。
706 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 12:30:28 ] 木下本が出たのは雪豹後だったはず。
707 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:17:37 ] >>706 違う。
708 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:19:15 ] >>706 あれは マイコミジャーナルに長期連載されてたのを まとめただけだから仕方がないね せめて 2.0 ランタイムについて一章だけでも付け加えてくれたらよかったんだが、 あれを買って 10.6 で実際にやってみようとしてはまってるひとが ときどきこのスレやら新 mac 板の Cocoa スレにでますね
709 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 15:54:05 ] あるクラスが持つプロパティの属性をassignにするべきか、retainにするべきか、copyにするべきかで悩んでしまいます。 結局わからないから、とりあえずassignにしとけってことが多いです。 独立性の高いクラスの場合はretainで保持した方がいいのかなと思ったりするんですが... 何か指針みたいなものってあるんでしょうか? それとも経験的な勘でみなさん決めてらっしゃるんでしょうか?
710 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 16:28:23 ] 最終的にどのタイミングで release されるか、を考えておくべき。
711 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 18:22:22 ] やっぱりオブジェクト型のプロパティはretainしてdeallocでreleaseしといた方が確実なんですかねぇ。 autoreleaseされたプロパティを渡される可能性もあるし。 となるとassignの使いどころって、数値型や文字列とかのプリミティブ型に対してってことになっちゃいますかねぇ... copyは...ゔーん、まいっか。
712 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 18:31:54 ] >>711 delegate や target など、 retain にすると循環参照でリークする人が 出そうなものは少し考えたうえで assign にしたりする。 知らぬ間に内容を変更されたくないオブジェクトで、 retain で受けると mutable string を渡したあとで中身を変更する人がいるかもしれないな、 などと心配する暇があるときは copy。 面倒なときはどっちも retain にしといて使う側が気を付けることにする。
713 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 19:08:42 ] あぁdelegateね、これは確かにサンプルとかみてもassignにしてあるのが多いですね。 まだ覚束ないですが、少し自分なりに整理できそうです。ありがとうございしました。
714 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 21:09:44 ] Xcodeって「¥」と「¥」(バックスラッシュ)って区別されてんのね。どおりで¥n入れても改行せんわけだわ。
715 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 00:09:40 ] XCode が、じゃなくて、標準のユニコードがそうなだけ
716 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 17:01:56 ] C と c は区別したーい
717 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 08:38:46 ] >>709 Google の Style Guide だと NSString なプロパティはとりあえず copy にしとけってことになってる google-styleguide.googlecode.com/svn/trunk/objcguide.xml?showone=Properties#Properties
718 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 13:16:24 ] Google は最早 Apple の敵だが、参考にしよう。
719 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 18:17:39 ] 敵判定って空しくなるだけ。
720 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 20:30:17 ] Googleは、アップル製品をアク禁できるんだから、Googleに戦う気があったら勝負にならない。
721 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 18:30:28 ] - (int)hoge:(int)a; みたいなメソッドを、performSelector:withObject: のように(SEL)と引数を与えて動かす方法ってないのかな? int を NSNumber にするしかない?
722 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 19:31:34 ] >>721 面倒くさいが、NSInvocation を作って動かすとか。 id invocation = [NSInvocation invocationWithMethodSignature: [piyo methodSignatureForSelector:@selector(hoge:)]]; int arg = 1; [invocation setArgument:&arg atIndex:2]; [invocation invoke]; int rtn; [invocation getReturnValue:&rtn];
723 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 19:34:24 ] ターゲット設定してなかった。[invocation setTarget:piyo] をやるか、 [invocation invokeWithTarget:piyo];
724 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 17:59:29 ] >>722-723 NSInvocation って以前見かけて、結局使い道が分からなくて放置してたクラスだけど、色々調べてみます。 ありがとう。
725 名前:デフォルトの名無しさん [2010/01/31(日) 23:32:14 ] >>720 Macユーザのシェアがごっそりなくなるから無理だろうな。
726 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 22:47:01 ] それはぶっちゃけ言うほど痛くない
727 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 02:14:29 ] Google使えなくなったら大部分は乗り換えるだけ。
728 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 04:10:35 ] Google社員にもMac愛好家くさるほどいんのにそんな誰得の展開になるわけないだろ 使えなくしたらグーグルの勝ち〜とか発想が幼稚すぎるわ おまえらなんでそんなに頭悪いの とてもプログラミングできるような頭じゃないと思うんだがなんでこのスレにいんの
729 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 05:14:53 ] キミ凄いね
730 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 07:58:20 ] 社員の趣味と企業戦略を一緒くたにして話す奴も大概頭悪いと思う
731 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 21:09:37 ] なんでプログラマやデザイナやミュージシャンとかクリエイティブなやつらにMac使いが多いか考えたことないだろ Macを除外する企業戦略とかニートや低脳厨房の発想
732 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 21:20:13 ] 理由は唯一つ お洒落だからですが何か
733 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 21:55:20 ] プログラマはねーよww
734 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 22:03:39 ] (クリエイティブな)ブログラマってことだろ
735 名前:デフォルトの名無しさん [2010/02/02(火) 22:54:44 ] >>731 デザイナーとミュージシャンにMacが多い理由は、割れの巣窟だったから。 写真屋とか、9割が違法コピーって言われてた。
736 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 22:57:15 ] 開発環境がそっくり入ったUNIXマシンなんだからプログラマが選んでも 何の不思議も無いと思うが
737 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 23:39:43 ] Googleの中の人とか、Ruby on Railsの人とか、イケテルプログラマはMac使いが多いね。
738 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 23:45:06 ] Linus ってイケてたっけ?
739 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 23:45:47 ] PDFをネイティブにサポートしてるからPDFのドキュメントも読み易いしね。 あとLeopard以降は64bitアプリそのまま使えるから、64bit版OSインストール し直しなんて手間も要らない。
740 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:07:30 ] MacはUNIXなんだから、ドザじゃないまともなプログラマはMac使う
741 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:21:08 ] 犯罪者が必死だな。
742 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:42:40 ] あらやだ くやしいんですね だいじょうぶですよ がんばって知能つけましょうね
743 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:46:49 ] カンファレンスや勉強会に行くと、もう過半数がMacだなぁ。 発表者なんか下手すると9割くらいMac。サポートがしょぼいはずのJava系ですら半分がMac。 個人的に、2kgを超えるモバイルマシンなんざありえねぇと思ってるので、正直理解できん。Airは中途半端すぎるし。
744 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 02:01:37 ] 個々は GNUStep, Cocotron もふくめた Objective-C のスレですよ! Mac の話題なんてとんでもない!ぷんすか
745 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 02:03:36 ] StepStone ってどうなったんだっけ?
746 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 02:09:05 ] >>745 NeXT が Objective-C の権利を買い取ったあともしばらく存続してたけど、 消滅したらしい en.wikipedia.org/wiki/Stepstone
747 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 10:40:00 ] プログラマは、技術的に面白い物は全部触ってみたくなる人種だ。 OSXとLinuxとWindowsが全部動くマシンがMacしかない以上、 他に選択肢は無い。 電話もiPhone持ちが大半だが、加えてAndroidも持ってたりするぞ。
748 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 14:03:23 ] 複数持つだけ 全部動くからという理由じゃ選択しないよ
749 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 20:20:42 ] 一人暮らしでもマシンが複数台あってLANでつながってるのが当たり前だと思うんだが。
750 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 20:23:22 ] 最近は仮想マシンでも十分な性能が出るから、うちはハードは1台だよ。
751 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 21:08:12 ] はーどうしたどうした
752 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 13:31:58 ] >>750 新しい機種を導入するたびに前のは破棄してるのか
753 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 15:11:30 ] >>752 中古屋に売ってます
754 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 16:40:22 ] CocotronでWin用のアプリ作ってみたひといませんか? 実用的ならうれしい。
755 名前:デフォルトの名無しさん [2010/02/06(土) 22:18:35 ] 初心者です。質問させてください。 stringWithCStringを使うと、コンパイル時に warning: ‘stringWithCString:’ is deprecated がでました。 stringWithCStringの代わりに何を使うのがよいですか?
756 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 22:26:32 ] Xcodeのヘルプメニューからたどれるドキュメントを読みましょう。 またはメソッド名 (stringWithCString:) のところでOption+ダブルクリック
757 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 00:20:28 ] 初心者はこのスレに来るな
758 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 00:31:21 ] え〜っ、なんで?
759 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 00:35:52 ] >>752 他人にあげたり、捨てたり、死蔵したり >>755 >stringWithCStringの代わりに何を使うのがよいですか? stringWithCString:encoding:
760 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 14:33:01 ] 複数のPCがあっても仮想マシン導入して、前のは捨てるのか。 どのくらいのペースで買い替えてるんだろう。 うちはしょっちゅう買ってるから1人暮らしなのにPCは常時7〜8台あるわ
761 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 18:16:51 ] もはやPCを買うことが目的になってるな。
762 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 20:04:59 ] >>758 冗談でつ でも質問が下らな過ぎてちょっとうんざりした。最近はドキュメント読まないゆとりが増えたのかなー。
763 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 01:52:54 ] >>762 うちはこないだ新人向けに調べ方の調べ方マニュアルを作ったな。 よくあるのがググる先生に頼りすぎて、ヘルプや付属ドキュメントを読まないとか。
764 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 02:42:50 ] 調べ方マニュアルじゃなくて、 調べ方の調べ方マニュアル、なのか?それはメタだなぁ...
765 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 12:59:27 ] メタメタにしてやんよ
766 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 14:39:02 ] お願いします。
767 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 15:28:42 ] メメタァ
768 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 18:00:04 ] うわあああああぁぁぁああああ!!!
769 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 18:32:17 ] バルス
770 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 18:44:24 ] ふぅ..
771 名前:デフォルトの名無しさん [2010/02/15(月) 02:45:53 ] Objective-C入門3日目の初心者です。 フォルダのファイル一覧を、とりあえずコンソールに出してみようとしています。 本やWebを参考にして次のようなコードを書いたのですが、エラーがありうまくいきません。 添削していただけないでしょうか。 初心者は来るなってことだったのですが、 Objective-C初心者はどのあたりにいけばよいでしょう? #import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { NSString *rootpath = @"/Public"; BOOL result = YES; NSArray *contents = [[NSFileManager defaultManager] directoryContentsAtPath:rootpath]; int i; for (i = 0; i < [contents count]; i++) { NSString *name = [contents objectAtIndex: i]; NSString *path = [dirPath stringByAppendingPathComponent:name]; BOOL isDir; NSLog(@"\n%@", path); } return 0; }
772 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 03:13:08 ] #import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init]; NSString *rootpath = [NSHomeDirectory() stringByAppendingPathComponent : @"Public"]; NSArray *contents = [[NSFileManager defaultManager] directoryContentsAtPath : rootpath]; for (NSString *name in contents) NSLog(@"%@", [rootpath stringByAppendingPathComponent : name]); [pool release]; return 0; }
773 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 09:47:18 ] 一見して良いように見えるが、どんなエラーがでるの? 僕らだってエスパーじゃないから、「エラーがでます」じゃわからんよ。 コンパイルエラーならコンパイルエラーを書き写してもらわんと困るし、 実行時のエラーならどんなエラーなのか書いてください。 「エラーがでます」とだけここに書き込むのは、 エラーが出て、エラーメッセージを解読する気がないという気がします それではプログラムは上達しませんよ。 単に ~/Public になんもファイルがないだけでは、と言う気がします。
774 名前:デフォルトの名無しさん [2010/02/15(月) 10:58:25 ] >>772 おお。ありがとうございました。 早速実行したところ、 warning: 'directoryContentsAtPath:' is deprecated (declared at /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSFileManager.h:164) と警告が出てビルドできませんでした。 これは、どこを見ればよいのでしょう? というか、NSFileManager.hの164行なんだと思うので、 見たところ、 - (NSArray *)directoryContentsAtPath:(NSString *)path DEPRECATED_IN_MAC_OS_X_VERSION_10_5_AND_LATER; という行でした。 NSString *rootpath = [NSHomeDirectory() stringByAppendingPathComponent : @"Public"]; NSString *rootpath = [[@"~" stringByExpandingTildeInPath] stringByAppendingPathComponent : @"/Public"]; などいくつか試したのですが、どうしてもうまくいきません。
775 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 11:56:23 ] 英和辞書をお奨めする
776 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 12:29:09 ] 雑談と初心者いじりしかやらないよねMac系の開発スレって
777 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 12:57:21 ] このレベルから教えるのは正直きっついな
778 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 13:17:01 ] 警告だからコンパイルは一応通ってるんじゃないの? OS 10.5以降は非推奨メソッドだから使わないでねって警告なんじゃないの?
779 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 14:01:11 ] >>774 コンソールを表示してみ。 > ビルドできませんでした。 嘘付かないでね。
780 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 14:10:21 ] >>776 これがわからないってことは、リファレンスどころか警告すら読めてないってことでしょう。 その状態でObj-Cで開発やるのはかなり厳しいよ。 で、「(やる気があるのなら)英和辞書をお奨めする」ってことなんだけどな。 それとも警告出るたびに聞きに来るの?
781 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 14:31:03 ] そういうレスだけは饒舌だなw
782 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 15:24:34 ] まぁまぁ^^;
783 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 18:49:27 ] むしろ 「Cocoaスレに行け」とか 「Mac プログラミングスレに行け」 って言われなかったのが奇跡だな… # Foundation Framework ネタはどこが適切なんだろ…?
784 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 18:58:27 ] 内容ジャンル的にはここでも問題ないと思うが、このレベルの無知無知初心者を相手にするのも大変だろう。
785 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:04:11 ] deprecatedはもうすぐなくなるよってこと。今はまだある。 これはすごく親切な警告。 なのでdirectoryContentsAtPath:をopt+ダブルクリックしてみる。リファレンスが表示される。 Special Considerations Because this method does not return error information, it has been deprecated as of Mac OS X v10.5. Use contentsOfDirectoryAtPath:error: instead. って書いてあるので代わりに contentsOfDirectoryAtPath:error: を使う。
786 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:05:44 ] 調べ方教えたんだから同じ内容ではもう来るなよ
787 名前:デフォルトの名無しさん [2010/02/15(月) 19:44:43 ] >>775-786 まあそうおっしゃらずに、 もうすこしおつきあいいただけないでしょうか。 さきほどのファイル一覧は、あらためてプロジェクトを作り直したら、問題なく動きました。 一覧も取得できました。 失敗したときは、まだトライ&エラーの段階なので、 ひとつのプロジェクトのソースを全選択して、 消しては新しいソースを貼りつけて、 実行していたのです。 ソースじたいは変更していないのですが、 ともあれお騒がせしました。 で、次なのですが、いちおう辞書片手に読んでますけど、 (1)デバッグ中に変数に代入されているデータを見る方法 (2)コンソールコマンドから、テキストエディタとかのGUIアプリケーションを実行できるのか? の2点を教えていただけないでしょうか。 (1)ブレークポイントを設定してみるものの、 そのデータが具体的になになのか、確認するには、 どこのメニューでどれを見ればよいのでしょう? (2)ソースは次のとおりで、実行すると、デバッガコンソールでいろいろ表示したあと、 (gdb)というモード? になり、期待していたように、 テキストファイルをテキストエディタで表示はしませんでした。 そもそもこういう方法で、外部のアプリケーションを起動できるんでしょうか? アドバイスお願いします。
788 名前:デフォルトの名無しさん [2010/02/15(月) 19:46:20 ] #include <Foundation/Foundation.h> int main() { NSTask *noteTask = [[NSTask alloc] init]; NSMutableArray *noteArgs = [NSMutableArray array]; NSString *path; path =[[NSHomeDirectory() stringByAppendingString:@"Public/tmp.m"]; // configure note [noteArgs addObject: path]; [noteTask setLaunchPath: @"/Applications/TextEdit.app/Contants/MacOS/TextEdit"]; [noteTask setArguments: noteArgs]; // launch applications [noteTask launch]; // wait applications return 0; }
789 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 20:03:01 ] >>787 (1) ブレークポイントで停止したら適当な変数名にカーソル合わせる またはデバッガコンソールで p コマンドか po コマンド使う p は C の基本データ型、 po は ObjC のオブジェクトの内容を表示する p intVar po object po [object value] てな具合 あとは help コマンドで調べて (2) >[noteTask setLaunchPath: @"/Applications/TextEdit.app/Contants/MacOS/TextEdit"]; Contants じゃなくて Contents な 「いろいろ表示」された中に手掛かりが書いてある、ちゃんと読めよ
790 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 22:17:46 ] 親切だなぁ
791 名前:デフォルトの名無しさん [2010/02/15(月) 22:27:00 ] >>789 ありがとうございました。
792 名前:デフォルトの名無しさん [2010/02/18(木) 23:36:01 ] Objective-C気持ち悪い
793 名前:デフォルトの名無しさん [2010/02/18(木) 23:48:27 ] テキストフィールドに入っている文字のバイト数が一定値以上だったらエラーを出したいのですが NSLog(@"OK %d", MAX_TITLE_LENGTH-strlen([[tfThreadTitle text] cStringUsingEncoding:NSShiftJISStringEncoding])); if(MAX_TITLE_LENGTH-strlen([[tfThreadTitle text] cStringUsingEncoding:NSShiftJISStringEncoding])<0) { NSLog(@"haitta"); return; } その一定値を超えてもこのif文に入ってくれません。 NSLogで数値の確認をしてみたのですが、-2となっているのにも関わらず、 直後のif文の判定を素通りしているようです。何が原因なのでしょうか。。助けてください。。
794 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:12:12 ] >>793 NSStringのUTF8Stringを使ってconst char *型の文字列の先頭ポインタを取得して使う。
795 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:55:56 ] >>793 strlen の戻り値は符号なしだから、> の左辺はマイナスにならないよ。 if (strlen(...) > MAX_TITLE_LENGTH) と書くべき。C 言語からやり直しだね。
796 名前:デフォルトの名無しさん [2010/02/19(金) 02:25:05 ] >>794-795 ひゃあ、ありがとうございます。 strlenの戻り値はunsignedなんですね。。。 ありがとうございました。
797 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 06:08:41 ] NSString*を返り値として返す関数があるのですが、 NSString* func() { NSString *str = [[NSString alloc] initWithFormat:@"%d", 1]; return str; } 例えばこういう場合って、どうすればいいのでしょうか? releaseしたらreturnできませんし、returnしたらreleaseできませんよね?
798 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 06:25:45 ] >>797 まさにそういう時のためにautoreleaseがあるのだよ
799 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 08:16:29 ] お〜autorelease!! ありがとうございます! [[[NSString alloc] initWithFormat:@"%d", 1] autorelease]; でいいんですよね!ありがとうございますっ!
800 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 08:23:43 ] この場合stringWithFormatもあるけどな。
801 名前:デフォルトの名無しさん [2010/03/03(水) 23:55:05 ] iPhone作りたいんですけど、なにせwin野郎なんでMac全然勝手が分かりませんw とりあえずiPhone用の開発環境揃えたいんですけど、お勧めセット一式誰かお願いできますか? あと、windows系とのネットワークファイル共有って簡単にできるでしょうか?
802 名前:デフォルトの名無しさん [2010/03/03(水) 23:57:28 ] まだ、ソフトもハードも無いので、勧めセット一式はソフトハードセットでお願いできるとありがたいです。
803 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:00:59 ] スレ違い。死んでくれ。
804 名前:デフォルトの名無しさん [2010/03/04(木) 00:01:26 ] Objective-C気持ち悪い
805 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:03:08 ] じゃあ Objective-C は代わりにおじさんがやっておくわ
806 名前:デフォルトの名無しさん [2010/03/04(木) 00:04:27 ] Appleて、現代的な言語作ってないんだよな
807 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:05:47 ] ObjC が最強過ぎるからな
808 名前:デフォルトの名無しさん [2010/03/04(木) 00:11:26 ] Objective-Cなんて糞は正直触りたくない
809 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:15:36 ] 代わりに俺が触っておくから、寝てて良いよ
810 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:19:24 ] お前に触られるぐらいなら死んだ方がまし
811 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:21:25 ] いや、お前を触るわけじゃねえw
812 名前:デフォルトの名無しさん [2010/03/04(木) 00:25:01 ] >>803-811 マジ頭おかしいんじゃね、お前ら 樹海にいって首つって死ね
813 名前:デフォルトの名無しさん [2010/03/04(木) 00:26:21 ] iPhone作りたいんですけど、なにせwin野郎なんでMac全然勝手が分かりませんw とりあえずiPhone用の開発環境揃えたいんですけど、お勧めセット一式誰かお願いできますか? あと、windows系とのネットワークファイル共有って簡単にできるでしょうか? まだ、ソフトもハードも無いので、勧めセット一式はソフトハードセットでお願いできるとありがたいです。
814 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:26:55 ] >>802 ソフトは登録してダウンロードするだけだよ ハードは現行機種なら何でも良いけど、メモリ多めの方が何かと良いよ
815 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:34:15 ] >>801-813 このスレ荒らして何の得がある……
816 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 01:28:26 ] >>813 iPhone作りたいなら中国の工場に就職しろ
817 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 01:57:20 ] >>813 こんな質問してるくらいだから、多分無理なんだろうな。 下手に教えないほうがいいぞ。手を出し始めたらこのスレがくだらない質問であふれかえってしまう。
818 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 02:48:17 ] >>813 MacProとCinemaDisplayオススメ あとFinalCutStudioとLogicかな。 なんやかや結局揃えるハメになるので最初にまとめて買っておくが吉。 ノートで十分とか言う奴がたまにいるが、デスクトップだとアプリのビルド時間が断然早く作業効率が非常に良い。 Windowsとの共有は簡単にできるよ。
819 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 13:30:42 ] とりあえずインテルのMac mini買えばあとはオンラインで全部そろう それでエミュレーションで動かしてから考えるといいんじゃないかな
820 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 15:41:41 ] >>818 どもどもです、とりあえずそれでいってみようかと思います。 リソースの編集もMac側でやった方が効率いいですかね? コードだけそっちで作ってみようかと目論んでいたのですが・・・
821 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 16:16:18 ] >>820 どっちでもいい。 あと最初にしっかりガンマ特性や色温度の管理うぃやっておけば、 実機で印象が変わったりジャギーが目立つ等の問題も避けられる。 (ある程度までは、だけど)
822 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 17:22:02 ] >>818 アプリのビルド時間が早くなるって、どういうことだ?
823 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 18:21:28 ] マシンの性能差だろ。
824 名前:デフォルトの名無しさん [2010/03/07(日) 01:53:25 ] iPhone用のアプリを作っていますが、NSDictionaryの使い方で悩んでいます。 以下の1行で、プログラムの実行が異常終了してしまいますが、理由がわかりません。どなたかヒントをいただけませんか? sControls = [NSDictionary dictionaryWithObjectsAndKeys: display1, card1, display2, card2, display3, card3, display4, card4,nil]; ただし、 IBOutlet UILabel *display1; IBOutlet UIButton *card1; IBOutlet UILabel *display2; IBOutlet UIButton *card2; IBOutlet UILabel *display3; IBOutlet UIButton *card3; IBOutlet UILabel *display4; IBOutlet UIButton *card4; です。 最初は、card1〜card4のいずれかがnilで、その結果NSInvalidArgumentExceptionが起きているのでは?とデバッガで値を検査しましたが、そうではありませんでした。
825 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 01:55:31 ] デバッガのコンソールメッセージは以下の通りです。 よろしくお願いします。 2010-02-24 00:15:27.446 XXXXXXXXXXX[69972:207] *** -[UIRoundedRectButton copyWithZone:]: unrecognized selector sent to instance 0x3b14a50 2010-02-24 00:15:27.447 XXXXXXXXXXX[69972:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UIRoundedRectButton copyWithZone:]: unrecognized selector sent to instance 0x3b14a50' 2010-02-24 00:15:27.449 XXXXXXXXXXX[69972:207] Stack: ( 29258843, 2531099913, 29640763, 29210230, 29062850, 28990666, 28990186, 28988857, 10209, 3209026, 9269, 2692555, 2730422, 2718516, 2700927, 2728033, 37354841, 29043584, 29039688, 2694677, 2731951, 9184, 9038 )
826 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 03:14:30 ] 一旦MutableDict 作って、一個ずつKey と Objectを設定してみろ。
827 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 03:44:06 ] >>824 keys must conform to the NSCopying protocol
828 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 19:35:03 ] メソッド名を良く読めって話だな。割と罠ポイントだとは思うがw
829 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 02:05:24 ] もうvisual studioもeclipseも触りたくない。
830 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 10:14:51 ] そんなあなたにNetBeans
831 名前:デフォルトの名無しさん [2010/03/20(土) 09:23:49 ] live.nicovideo.jp/watch/lv13400073
832 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 09:43:57 ] ニコ厨死ねよ
833 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 23:17:05 ] 口半開きってやっぱダメだな
834 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 18:03:17 ] あの、ポインタに対して使う * っていうのは、内容を複製して渡すのでしょうか? 例えば、NSTextField* field があったとして、 isnumber(*[field.text UTF8String]) としたとしますよね。この場合、[field.text UTF8String] だけで渡そうとすると ポインタだからダメ、みたいな感じで怒られますが、*を付けるという事は その中身を渡すという事ですよね? 中身を渡すというのは、そのポインタが指す中身を複製してその関数に渡して いるのでしょうか? 質問がうまく伝わっていなかったらすみません。どうも中身を渡すというのが どういう意味なのかがよく分からなくて…。Objective-C 以前に C が分かって いないのでおかしな事を言っていたらすみません。
835 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 18:05:36 ] すいません、NSTextField -> UITextField の間違いでした。
836 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 18:54:43 ] >>834-835 Cは(Objective-Cも)値渡しだから、ポインタだろうがなんだろうが 渡すときは常に中身がコピーされる。 ポインタを渡したときは、コピーされるのはポインタの値だから 中身はコピーされないな。 中身を渡したら中身がコピーされるだろう。
837 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 18:56:42 ] >>836 中身っつうか、渡したものが常にコピーされるってことね。 分かりにくかったらすまん。
838 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 20:18:47 ] >>834 >あの、ポインタに対して使う * っていうのは、内容を複製して渡すのでしょうか? 合ってる、けど「中身」が何であるか勘違いしないように [field.text UTF8String] は char * を返すんだが、この場合の中身は 先頭の1文字であって文字列全体じゃないからな
839 名前:834 mailto:sage [2010/03/23(火) 16:42:01 ] >>836 ありがとうございます。 ポインタを渡したらそのポインタの値がコピーされるという事ですよね。 >>838 ありがとうございます。 そうそう、そこも不思議だったんですよね。実際に isnumber はどう 処理しているのでしょう?アドレスに1ずつ足していきながら NULL 文字 がくるまでを文字列と判断するのでしょうか? ソースを探したんですが見つからなくて…。
840 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 17:52:23 ] isnumber が扱うのは「(所謂)文字列」ではなく「文字」だよ。
841 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 22:07:21 ] >>839 >アドレスに1ずつ足していきながら 「文字列」(char *、つまり連続した文字の先頭へのポインタ)を受け取る関数についてはその通り ただ isnumber は >>840 が言うとおり「文字」(char)を受け取って、 その1文字が数字どうかを判別する
842 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 22:59:21 ] >>840 , 841 げげっ!そうなんですね、という事は、何らかの NSString が数値として 解釈できるかどうかは、何か別の方法で判定しなくてはいけないという事ですね。 Objective-C というよりは Cocoa っぽい話題で申し訳ないですが、皆さんは ある NSString が数値として解釈できるかどうかはどの様に判定していますか?
843 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 23:19:09 ] NSNumberFormatter ?
844 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 23:20:20 ] !
845 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 00:04:21 ] >>843 NSNumberFormatter 使ってみたんですが、例えば aiu6 とかが蹴られるのは いいんですが、6aiue とかやると解釈されちゃうんですよね。 厳密モードみたいなものがあるのかと思ったんですがないし…。 正規表現とかでやるしかないんでしょうか。と思ったら Cocoa には正規表現を するためのクラスがないんですね、ガーン…。困った…。
846 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 06:32:26 ] ogrekit
847 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 12:31:40 ] -[NSNumberFormatter getObjectValue:forString:range:error:] が使えるんじゃないかな。 自分は libc の strtol() 系で事足りてるから使ったことないけど。
848 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 22:49:40 ] sscanf()のObjective-C版が欲しいと思ったことありませんか? UTF-8が処理出来るとかなり違うかと思うのですが。
849 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 22:51:07 ] NSScanner
850 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 01:53:35 ] >>847 やってみたんですが、やはり 0aiu みたいなものは解釈されてしまうみたいですね。 しょうがないので、数値かどうかを判断する関数を作り、とりあえずそこで数値と 判断したものだけ実際に数値に変換させる様にしました。 どうもおさわがせしました。でもなんか楽しいですね、Objective-C を頑張って 覚えたいです。
851 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 13:48:33 ] >>850 range:
852 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 15:06:47 ] -getObjectValue:...より簡単な-numberFromString: は使ってみたか? 自分の環境では6aiueはNULLを返す。 厳密モード的な動作は -setLenient: で切り替えられると思うが,NSNumberFormatterのAPIページくらい目を通したか。 ただ6aiueの解釈には影響ないみたいだが。 あるいはgetObjectValue:...を使いたいなら >>650 の通りだな。
853 名前:834 mailto:sage [2010/03/25(木) 18:27:08 ] >>852 ありがとうございます。 もちろん numberFromString は使ってみたのですが、普通に 数値として返ってきてしまうので困っていました。 setLenient も指定してみましたが、効果がありませんでした。 やり方がいけなかったんですかね…。家に帰ってもう一度やってみます。
854 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 09:20:21 ] shouldNotImplement: や notImplemented: って、 may not respond to '-notImplemented:' ではなくするには何をインポートすれば良いんだ? #import <objc/Object.h> やっても意味無いようだけど。 当方OSX 10.6。
855 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 12:25:59 ] >>854 - (id)hogehoge { return [self notImplemented:nil]; } こうなってんじゃないの? 子クラスで -hogehoge を再定義すれば
856 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 15:27:23 ] >>855 ? いや、 - (void)hoge { [self notImplemented: _cmd]; } をエラー無くビルドしたいんだけど。notImplementedされてるクラスを云々じゃなくて、自分でnotImplementedしたいんだ。 今クラスクラスタ作ってるところで。
857 名前:デフォルトの名無しさん mailto:sage [2010/04/03(土) 02:16:08 ] >>856 ああすまん 自分で空の -(void)notImplemented: を定義すりゃいいんじゃね
858 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 00:45:54 ] NSArray* array = [NSArray arrayWithObjects:@"a",@"b",@"c",NULL]; みたいな、オブジェクトをカンマで区切って複数指定できるメソッドって、 定義する側ではどう書くのでしょうか? もしや、カンマで区切って繋げると自動的に NSArray に変換してくれたり しているんでしょうか??
859 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 01:45:11 ] 可変長引数でググレカス。 developer.apple.com/mac/library/qa/qa2005/qa1405.html あと Foundation クラスの実装例が見てみたいなら CF や libFoundation のソースでも読んどけ。 www.google.com/codesearch/p?#_rn0kgFhkQA/redir/sope/55519/url_tgz/sope-4.5.4-nevermind-r878.tar.gz|EGqseItem4o/sope/libFoundation/Foundation/NSArray.m
860 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 02:30:46 ] 先生、「可変長引数」という単語を知らない人はどうなりますか…。 という冗談は置いておきまして、ありがとうございました。 ただ、可変長引数という単語で検索してもほとんどきちんと解説している サイトってないですね…。「va_list」とか「va_start」とか一体何者なのか 分かりませんし…。まぁとにかくそのあたりから調べてみる事にします。 ありがとうございました。
861 名前:デフォルトの名無しさん [2010/04/05(月) 12:54:31 ] これだからゆとりは
862 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 13:26:03 ] ダイナミック本ってどうなの
863 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 15:20:27 ] 索引付いてないし装丁も粗いし、Webの奴読んでりゃ良いと思うよ。
864 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 18:52:14 ] 最近のプログラマーはやった物勝ちなんだな
865 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 14:39:34 ] objc2 runtime 関数 const char *class_getIvarLayout(Class cls); について質問です。 この layout というのは、どういうものなのでしょうか? ソースコードを調べていくと、objc-runtime-new.h に class_t 構造体->class_rw_t 構造体->class_ro_t 構造体->uint8_t *ivarLayout となっていて uint8_t*型だとわかりましたが、何の値を示すものなのでしょう? よろしくお願いします。
866 名前:865 mailto:sage [2010/04/14(水) 15:44:41 ] 解決には至っていませんが… objc-layout.m に GC につかうもの、っぽいことが 書いてあります。が、いまいちどうなっているのかよく分からないので、 ご存知の方がいらしたら、ご教示お願いいたします。 /********************************************************************** * Object Layouts. * * Layouts are used by the garbage collector to identify references from * the object to other objects. * * Layout information is in the form of a '¥0' terminated byte string. * Each byte contains a word skip count in the high nibble and a * consecutive references count in the low nibble. Counts that exceed 15 are * continued in the succeeding byte with a zero in the opposite nibble. * Objects that should be scanned conservatively will have a NULL layout. * Objects that have no references have a empty byte string. * * Example; * * For a class with pointers at offsets 4,12, 16, 32-128 * the layout is { 0x11, 0x12, 0x3f, 0x0a, 0x00 } or * skip 1 - 1 reference (4) * skip 1 - 2 references (12, 16) * skip 3 - 15 references (32-88) * no skip - 10 references (92-128) * end * **********************************************************************/
867 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 22:29:58 ] コメントを読んだ感じだと、 あるオブジェクトが他のオブジェクトを参照するのに使っているポインタ領域が どのオフセット位置にあるのかを表しているように読める。 例として書いてある { 0x11, 0x12, 0x34, 0x0a, 0x00 } だと、 各々の上位ニブル(= 4 ビット)分スキップしてと下位ニブル分だけワードを読むことになっているので、 まず、 0x11 で 1 ワードスキップして 1 ワード見る 次に 0x12 で 1 ワードスキップして 2 ワード 0x3f で 3 ワードスキップして 0xf = 15 ワード 0x0a で現在のワードから(= 0 ワードスキップ)10 ワード見る。 0x00 = '¥0' で終端。 1 word = 4 byte = 32 bit で、オフセットが 4, 12, 16, 32-128 の位置のワードが表されている。 このメモリレイアウトに従ってメモリ領域を見ればオブジェクトの参照関係がわかる。 という感じかなあ。 Ivar は Instance Variable の略じゃないかと。 GC については最近出た本を参照。
868 名前:865 mailto:sage [2010/04/15(木) 20:40:07 ] >>867 「ニブルの上位下位」のところがよく分からなかったんですが、なるほど、 そういう意味だったんですね。分からなかった「ニブル」の意味も何となく 分かりました。ありがとうございます。 もう一つお教えください。GC についてですが、最近新しい本が出たのでしょうか?
869 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 20:56:05 ] > 868 byte : 8 bit nibble: 4 bit これはbyte -> bite (かじる)にひっかけて 「ちょこっとかじる」という意味のnibbleをbyteの半分を 指す様になった。 ほとんど冗談の様なネーミング。
870 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 21:06:47 ] じゃあニブルはニップルをかじってるのか
871 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 21:06:49 ] 英語版のwikipediaによると、bite->byteにひっかけて nybbleとスペルしたり、かならずしも4bitではなくて 5bitや6bitに使われた場合もあったそうだ。 また、 用語の起源はIBMのメインフレームらしい。 en.wikipedia.org/wiki/Nibble
872 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 21:09:17 ] byte -> bite じゃなくて bite -> byte だよね bite が byte の語源
873 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 21:13:07 ] 継手のニップルってそのまま形から来てるのか
874 名前:865 mailto:sage [2010/04/15(木) 21:14:47 ] >>869 レスありがとうございます。 その話、何かで見たことがありました!完全に忘れていましたが・・・ おかげでもう忘れない気がします(笑)
875 名前:865 mailto:sage [2010/04/15(木) 21:16:46 ] あれ、書いてるうちに… みなさん、ありがとう。
876 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 23:49:00 ] >>868 GC の本っていうのは ttp://www.amazon.co.jp/dp/4798025623 のこと オブジェクトの参照関係が GC でどう使われるかに興味があるんだったら 読んでみるといいかもしれない ところで byte = 8bit じゃない計算機もあったよね そのために 8bit を明示するときは octet と言ったり
877 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 13:30:37 ] ちくびと聞いて
878 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 13:04:34 ] +(void)hoge; じゃなくて +hoge; って宣言を見かけたんだが、これはなんだ?
879 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 13:16:13 ] int hoge;
880 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 15:17:16 ] + (id)hoge; だよ。
881 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 21:32:43 ] hage
882 名前:865 mailto:sage [2010/04/19(月) 09:30:11 ] >>876 カメレスでごめんなさい。本の情報ありがとうございます、手に入れて読んでみます。
883 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 22:04:45 ] @interface MyObject : NSObject + (void)hoge; - (void)piyo; @end @implementation MyObject + (void)hoge { NSLog(@"hoge");} - (void)piyo { NSLog(@"piyo");} @end @interface MyMyObject : MyObject @end @implementation MyMyObject + (void)hoge { NSLog(@"hogehoge");} - (void)piyo { NSLog(@"piyopiyo");} @end @interface MyMyMyObject : MyMyObject @end となってて、MyMyMyObject で祖父クラスのメソッドを呼ぶ時って、 @implementation MyMyMyObject クラスメソッドの場合はコレで良いとして、 + (void)hoge { [[[self superclass] superclass] hoge]; } インスタンスメソッドの場合は、IMP取得くらいしかないのかね? - (void)piyo { IMP imp = class_getMethodImplementation([[self superclass] superclass], _cmd); (*imp)(self, _cmd); } @end supersuper とか無いし。
884 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 10:24:01 ] >>883 親でover-rideされてるにも関わらず祖父を直接見るなんて、そもそもの設計が大間違いなのでは? と Obj-C 初心者が言ってみる。
885 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 10:40:05 ] メッセージングでやる場合。 - (void) piyo { struct objc_super superSuper = {self, [[self superclass] superclass]}; objc_msgSendSuper(&superSuper, _cmd); } あとは、class_replaceMthod 等でメソッド入れ替えなども可。
886 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 12:46:27 ] [[self superclass] superclass]とかやると、 MyMyMyObjectのさらにサブクラスを作ったときにハマるな。
887 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 16:42:25 ] [self superclass] == [super superclass] であることを知って驚いた14の春
888 名前:デフォルトの名無しさん [2010/05/01(土) 11:17:15 ]
889 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 11:55:50 ] >>887 ほんとだ。なんでこうなるの?
890 名前:デフォルトの名無しさん [2010/05/01(土) 20:43:49 ] superclassメソッドをサブクラスでオーバーライドしないかぎり、[self superclass]とやっても、[super superclass]とやっても、呼び出されるメソッドは同じ。 さらに、[self superclass]も[super superclass]も、レシーバーはselfになる。 詳しくは、Objective-Cのruntime APIを見てください。
891 名前: [―{}@{}@{}-] デフォルトの名無しさん mailto:sage [2010/05/06(木) 17:31:55 ] >>883 祖父クラスが基本的なメソッドを提供していて、子クラスでオーバーライドしたんだけど 孫からも基本的な処理へのアクセスが必要だというような場合は祖父クラスで hoge を basicHoge として別名でも提供しておくという Smalltalk 流の作法で済ませられない?
892 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 00:40:25 ] スレ違いかもしれませんが質問ですm(_ _)m NSData型の変数に4バイト、例えば 0x00 0x00 0x00 0x7F と入ってる場合、これをInt型の127に変換するには どうすればいいのでしょうか?
893 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 01:37:17 ] int a = CFSwapInt16(*(SInt32*)[data byte]);
894 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 01:39:00 ] ミスった
895 名前:892 mailto:sage [2010/05/09(日) 12:02:34 ] 回答&ヒントありがとうございます。 int a = CFSwapInt32HostToLittle(*(SInt32*)[data bytes]); で、まだ意味はぼんやりとしか分かってないですが、 無事期待の動作が得られました。
896 名前:デフォルトの名無しさん [2010/05/18(火) 10:45:41 ] 質問です。iPhone用プログラムを書いていますが。 NSInteger index = random() % count; NSInteger index2 = random() % count; while(index2 == index) {//同じにならないように NSInteger index2 = random() % count; } とやって、二種類のランダムな数字を発生させようとしていますが、 何度かランダム数を発生させるとプログラムがストップしてしまいます。 なにがいけないのでしょうか。どなたかご教授願います。
897 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 10:55:35 ] NSInteger index = random() % count; NSInteger index2 = random() % count; while(index2 == index) {//同じにならないように NSInteger index2 = random() % count; // このindex2と前のindex2は別物 } 一つ目のindex2と二つ目のindex2は別物です。 while(index2 == index) {//同じにならないように index2 = random() % count; // 宣言しない } としてください。 // 変数が隠されてしまっている とか警告出ませんでした? // 変数スコープとかその辺の話も調べてね
898 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 10:55:36 ] 日本の未来が心配です。
899 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 11:06:39 ] あまりにもあんまりな問いで最初何が駄目なのかわからなかった
900 名前:896 mailto:sage [2010/05/18(火) 11:35:51 ] >>897 うぉぉ、当たり前ですよね。コピペしてたのが間違いでした。 ホントにあんまりな質問に回答して頂き、ありがとうございました。感謝感激です。 あ〜恥ずかしい。
901 名前:デフォルトの名無しさん [2010/05/18(火) 14:20:24 ] すみません、質問させてください。 iPhone用アプリのプログラムを最近始めた初心者です。 <質問> iPhoneから外部DB(postgreSQL)に接続する手法がわかりません。 色々調べましたがピンと来なかったのですが、Object-Cから直接DBConnect するような方法は無いのでしょうか? XCode自体、初心者なのでよくわからないのですが、 1. Ruby?を利用する 2. java+JDBCを利用する のような感じになるのでしょうか。 ヒントだけでも教えていただけたら助かります。 宜しくお願い致します。
902 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 14:46:11 ] ググレカス
903 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 15:11:38 ] この質問前どっかで見た気がする
904 名前:デフォルトの名無しさん [2010/05/18(火) 17:10:02 ] 質問です。 UIScrollViewで画面より大きい画像を表示しているとき、画面に写っているのは、 ScrollView上でどの位置(座標)なのかを取得するにはどうしたら良いでしょう? 検索をしても、タッチした座標の検出しかわかりませんでした。 よろしくお願いします。
905 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 17:31:23 ] スレチ。
906 名前:デフォルトの名無しさん [2010/05/21(金) 15:12:54 ] 基本的なことなのですが、いろいろ調べてもわからなかったので質問させてください。 あるファイル(A.m)から、別のファイル(B.m)のクラス( -(void)test{...} )にアクセス するにはどうしたら良いのでしょうか? B.hをA.mにimportして、A.m内で[self test]とやってみましたが、警告が出てうまく ビルドできませんでした。 低レベルな質問ではありますが、よろしくお願いします。
907 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 15:35:06 ] >>906 自分も初心者だけど、A.m内でBのインスタンスを作ってないんじゃ? A.m内で[self test]ってしても、selfはAのインスタンス自身を参照するよ。 testメソッド(objCはメッセージだっけ?)を持っているのがBのインスタンスだからできないんじゃないかな。
908 名前:906 mailto:sage [2010/05/21(金) 15:47:12 ] >>907 ありがとうございます。できました。 今まで何となく使ってた、selfの意味をようやく理解しました。
909 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 23:47:32 ] NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; @try { ここで例外発生。 } @catch (NSException * e) { NSLog(@"%@ @catch in %@", e, NSStringFromSelector(_cmd)); @throw; } @finally { [pool release]; } で、上位のレベルで例外を受ける時、例外は pool に登録されるせいで、@finally 中の [pool release]; で解放されちゃって、 上位のレベルで例外を触るとバッド・アクセスになる。 例外発生時に pool がメモリリークするから @finally に入れたのだが、逆にこんな問題が出てくるとは。 NSAutoreleasePool を作らないという選択肢以外に、何かリークしない上手い対処法無いかな? @throw; しないで、上位には NSError で渡すとか考えてるけど。 例外処理とか今まで殆ど触ったこと無いから、勝手が分からない。
910 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 00:07:47 ] >>909 例外処理に悩むならException Programming Topics for Cocoa くらいは嫁。その中の Exception Handling and Memory Managementに、まさしく あなたが悩んでいることについて書いてある。ピックアップすると The simplest is to refrain from releasing local autorelease pools in @finally blocks もっとも簡単な方法はfinalyブロックでローカルなプールを使うなってこと。
911 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 00:18:05 ] >>910 申し訳ない。その辺の文章は全て和訳されてるとばかり。 developer.apple.com/mac/library/documentation/cocoa/conceptual/Exceptions/Tasks/HandlingExceptions.html おお、素晴らしい。savedException を使います、成る程ね。 ありがとうございました。
912 名前:910 mailto:sage [2010/05/25(火) 00:22:43 ] じゃあどこでpoolをreleaseするのか不安に思ってるかもしれないので、 追記。 Autorelease poolはスタック状のデータ構造になっていて、 最上位でないAutorelease poolが解放されると、それより上の 内側のpoolおよびそれに登録されたオブジェクトはリリースされる (Memory Management Programming Guide for Cocoa; Scope of Autorelease Pools and Implications of Nested Autorelease Pools 参照) Cocoa/Objective-Cでinitとreleaseの対応は金科玉条 (破るとすなわちメモリリーク) だけど、autorelease pool自体はinitとreleaseが厳密に対応していなくても許容される…みたい。下層のpoolがreleaseされるのが前提だけど。
913 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 13:51:57 ] @interface MyAutoreleasePool : NSObject { NSAutoreleasePool *_pool; NSPointerArray *_buf; } - (void)throwToOuterPool:(id)obj; @end @implementation MyAutoreleasePool - (id)init { self = [super init]; if (self) { _pool = [[NSAutoreleasePool alloc] init]; _buf = [[NSPointerArray alloc] initWithOptions: NSPointerFunctionsZeroingWeakMemory]; } return self; } - (void)throwToOuterPool:(id)obj { [_buf addPointer: [obj retain]]; } - (void)dealloc { [_pool release]; for (id obj in _buf) [obj autorelease]; [_buf release]; [super dealloc]; } @end こんなん作って、@catch 中で [pool throwToOuterPool: e]; するコトにしたよ。
914 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 20:50:57 ] Objective-Cの逆コンパイラってありますか?
915 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 22:14:33 ] 何悪いこと企んでるんだ?
916 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 10:14:52 ] 今月で販売が終了してしまうプリンタのドライバを逆コンパイルしたい。
917 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 13:42:00 ] Objective-CってコンパイルしちゃうとCと区別付かないよね Objective-C特有の関数呼び出しが多数現れるけど
918 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 18:00:29 ] ObjC で書かれたドライバなんてあるの…
919 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 18:27:40 ] 馬鹿はレスしなくていいです
920 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 19:56:19 ] >>917 ObjC 特有の関数呼び出しが多数現れるから、コンパイルしても C と区別付くよ。
921 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 20:44:33 ] >>920 そうじゃなくて、>914へのヒントだよ
922 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 20:46:36 ] ObjC のメッセージ呼び出しを解釈するデコンパイラが有っても良いと思うよ?
923 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 22:12:38 ] code-dump.sourceforge.net/
924 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 02:21:48 ] 今まで色々書いてきて萩原本の内容を一通り制覇したけど、「分散オブジェクト」だけは未だどう利用すればいいのか分からない。 どういう処理に使ったとか、実践的・実用的な利用例があったら教えてくれ。
925 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 02:22:16 ] 経験談とか。
926 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:32:29 ] すでにコンパイルされたiPhoneのアプリを c#のように解析することはできますか?
927 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 14:04:48 ] >>926 >c#のように 具体的に何がしたいの?
928 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 14:54:53 ] >>927 ソースみて参考にしたいのです 特に規約とかないようなので
929 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 15:05:25 ] Objective-C なら結構動的に動いてる部分があるので 逆コンパイルもそれなりな形にできそうだけど いかんせん逆コンパイラが作られるほど有名な言語でもないというのが
930 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 15:07:21 ] >>928 デコンパイルしたいってことか。 残念ながら iPhone アプリのデコンパイラは知りません。 アプリの動きを知りたいなら、Instruments でカスタム DTrace スクリプトを書くのが一番良いと思います。
931 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 15:18:44 ] >>928 コーディング規約なら一応あるよ。 Coding Guidelines for Cocoa developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html あと、 /Developer/Examples の中にサンプルソース(TextEditとか)が 入っているので、参考になるかもよ。
932 名前:931 mailto:sage [2010/06/06(日) 15:20:47 ] Cocoaスレと間違えた。めんご
933 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 15:42:47 ] 規約がないってのは リバースエンジニアリングを禁止する規約がないって意味でしょ
934 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 16:10:28 ] 見落としてるだけだろ
935 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 22:38:46 ] いや、パクる気満々だな
936 名前:デフォルトの名無しさん [2010/06/08(火) 07:45:09 ] いえ、解析してそのゲームでチートしようと思ってます
937 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 08:02:20 ] ageんな死ね。
938 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 15:25:24 ] Objective-Cでは、厳密にprivateやpublicと明示的に記述し、スコープ分けしないのでしょうか? 入門書を何冊か読んだのですが、どれもインスタンス変数のスコープ分けをしていないので、気になっています。
939 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 15:27:26 ] @interface AClass : NSObject {
940 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 17:01:09 ] そのあたりに言及してるのは荻原本ぐらいじゃないかな
941 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 17:26:05 ] @privateでもKVCとかでアクセスできるし プライベートであるという表明だけは出来るけど 静的チェックは甘いよね。
942 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 10:11:59 ] >>940-941 ありがとうございます。 自分はJavaやってから始めたので、クラス内でしか使わない変数を隠蔽していないと どうも気になってしまって…。 荻原本は読みました。解説はしてるのですが、以降の章のサンプルコードでは積極的に 使ってませんよね。>>941 さんがおっしゃるように、 「スコープ分けしてもKVCでどうせアクセスできるんだから、細かい事は気にすんな」 って事なのでしょうかね。
943 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 12:11:55 ] 表明するのは大事だよ 通常アクセスならエラーが出るし、 迂闊に触ってしまうことへの注意喚起も出来るから それで慣れている人は続ける方がいいよ Appleのやり方も色々だよね。 昔から有るクラスはコメントで「privateだ」って書いてあったり idな型不明のオブジェクトに隠蔽したり @privateで宣言したり。
944 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:06:02 ] >>943 なるほど、ありがとうございます。 書いている方が安心できるので、書く事にします。 少しでも単純なバグを減らせるなら、これを書くぐらいなんとことないですしね。 id型で思い出しましたが、参考書はかなりid型を使っていますが、Objective-Cは動的型結合があるのでid型で書いた方が、何かと都合が良いのでしょうか。 「ここは絶対hoge型でしょう」みたいな箇所でid型を使うのは、Javaのような静的型付け言語に慣れ親しんでいた私の身には抵抗がありまして…。 「ごちゃごちゃ言う前に慣れろ」と言われれば、それまでなんですけど、ハイ…。
945 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:24:18 ] 荻原本持ってるなら64ページに静的な型について書いてあるよ。 「明確な指針はないので好きにすれば良い」みたいなことが書いてある。 俺はクラス型を指定すると、コンパイル時に警告を出してくれるメリットがある のでどんどん使っていけば良いと思うよ。 ただ、コンパイル時には静的な型チェックを行ってくれるが、実行時にはすべて id型になっているということがJavaとは違うので注意。 id型の代わりにクラス型を指定したせいでデメリットが生まれることはあまり ないと思われる。
946 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:35:23 ] >>945 ありがとうございます。書いてました。申し訳無いです。 >ただ、コンパイル時には静的な型チェックを行ってくれるが、実行時にはすべて >id型になっているということがJavaとは違うので注意。 この違いは大きいですね。注意します。ありがとうございました。
947 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 15:10:05 ] >>943 WebViewはちょっと面白いよね。 @privateでWebViewPrivateクラスのインスタンス変数を持ってるだけだし、 WebViewPrivateクラスの実装とかはなぜかWebViewDataにある。
948 名前:デフォルトの名無しさん [2010/06/11(金) 16:03:43 ] CFIndex型の変数indexに、どんな値が入っているか見ようと思うのですが、 NSLog("%O", index); としましたが、ポインタコンパチブルなんたらと怒られました。 何が間違っているのでしょうか?と質問しようとして、 よく見たら、1つ目の引数のポインタが型違うやんみたいなことを言われました。 NSLog(@"%O", index); としたら、うまく行きました。自己解決しました。ありがとうございました。 以前にもこういうミスがありまして、こういうミス起きないようにするには どうすればよいでしょうか。変な質問ですがよろしくお願いします。
949 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 16:50:47 ] 文字列の前には@を付けると頭に叩き込むしかないんじゃないかな。
950 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 20:30:49 ] >>948 一度遭遇したエラーや警告を、その原因、対処方法とともに意識して憶えていく努力をする。
951 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 20:37:59 ] 次に948は、 CFIndex型の変数indexに、どんな値が入っているか見ようと思うのですが、 printf(@"%O\n", index); としましたが(ry
952 名前:948 [2010/06/12(土) 14:48:06 ] みなさんアドバイスありがとうございます。 >>949 「あっと驚くNSString」これで頭に叩き込もうと思います。 頭に叩き込んでいたら怪我をしてしまいまして、これから病院に行ってきます。 >>950 そうですよね。がんばります。 >>951 次は無いようにしたいですね。 そこで新たな質問ですが、 NSLog(@@"%O", index); のところでエラーが出ます。 原因はなんでしょうか?
953 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 14:56:21 ] バカかお前は。
954 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 23:08:40 ] バカの相手するのもなんなんだが、log って打って補完すれば NSLog(@""); って補完してくれて "" の中にキャレット動かしてくれるぞ
955 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 06:40:53 ] >log って打って補完すれば NSLog(@""); 俺、べつのバカだけど、そうなんだ!べんりだなー
956 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 23:18:32 ] すみません 非常に初歩的で申し訳ないんですが、iphone ipadのプログラムがしたいと思い、windowsに>>15 の www.gnu.org/software/gnustep/experience/Windows.html の通りインストールしたんですが、shellのコマンドがわかりません というかみなさんMACでやってるんですか? iphone ipad の用プログラミングでvisual C++みたいなのありませんか?
957 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 23:21:02 ] スレチ。というか Mac も持ってないのにコード書いても意味ないだろ。
958 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 23:30:07 ] >>957 そうなんですか 初級過ぎてすみません>< アップル公式のSDKもよく見たらMAC限定みたいですね 出直してきます
959 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 23:44:33 ] ちょっとわらった
960 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 09:45:40 ] ttp://code.google.com/p/json-framework/wiki/InstallationInstructions ここのOption 3を見ながらJSON-Frameworkを使ってMacアプリでテストを行おうとしているのですが、うまくいかずに困ってます。 フレームワークをプロジェクトに追加したので、3.までは終わってると思うのですが、 4の意味がわかりません。これは何をすれば良いのでしょうか?
961 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 10:31:17 ] >>960 サイドバーの 「ターゲット」を展開→アプリ名になってる項目を右クリック→「追加」→「新規ビルドフェーズ」→「新規コピーファイル」 開いたパネルの「デスティネーション」を「フレームワーク」に設定 アプリ名の項目を展開→「ファイルをコピー」の上に JSON.framework をドロップ
962 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 10:34:45 ] JSON.framework は実際のファイルではなくて サイドバーの <プロジェクト名>/Frameworks 項目の中に入ってるやつ
963 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 11:07:33 ] >>961-962 ありがとうございます。前進できました。 ビルドすると、JSON Frameworkのいくつかのファイルが見つからないというエラーが出ましたので、 私の設定のどこかがまずいのでしょう。 頑張って潰したいと思います。
964 名前:デフォルトの名無しさん mailto:sage [2010/06/21(月) 18:46:22 ] 楽しいココアのレヴューにこういう↓のあったんだが、実際のところどう? あと萩原本以外にいいのないですか?自分はCは中級くらいやれてます ********************* Leopardにアップグレードしてしまった方、 この本は使えません。Xcode Toolに大幅な変更があったからです。 まだTigerを使っている方。この本は貴方のためのものです。 本の通り作業して行けばCocoaのいろはのい位まではモノになるはずです。
965 名前:デフォルトの名無しさん mailto:sage [2010/06/21(月) 19:47:48 ] スレチ。
966 名前:964 mailto:sage [2010/06/21(月) 20:09:39 ] すみませんでした 新macのcocoaスレ行ってきます
967 名前:デフォルトの名無しさん [2010/06/24(木) 03:59:04 ] yomi.bbspink.com/test/read.cgi/ascii2d/1275848135/225 採用
968 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 22:15:30 ] codepad.org/H3j8eTAB このコードで、どのNSLogも出力されないんだが何か間違ってる? これじゃNSOperationQueueを使う意味がないのは承知の上。
969 名前:968 mailto:sage [2010/06/28(月) 17:59:49 ] Appleで聞いてくる
970 名前:デフォルトの名無しさん [2010/06/29(火) 18:10:59 ] V V (´・ω・`) うさちゃんピース
971 名前:デフォルトの名無しさん [2010/07/02(金) 05:44:56 ] すみません。 1ヶ月未満の初心者なんですが、初歩的なことでつまずいています。 ヘッダファイルで @interface PListReadViewController : UIViewController { NSArray* persons; } @property(nonatomic,retain) NSArray* persons; で、ソースファイルで @synthesize persons; -(void)hogehage{ NSBundle* bundle = [NSBundle mainBundle]; NSString* path = [bundle pathForResource:@"test" ofType:@"plist"]; NSArray* persons = [NSArray arrayWithContentsOfFile:path]; } としてるんですが、hogehageのpersonsはローカル変数として扱われてしまうみたいですね。 interfaceで定義してるpersonsに、パッケージにバンドルされてるplistを配列として展開して、 別の関数内でpersonsを使いたいんですけど、どうしたらいいんでしょうか?
972 名前:971 mailto:sage [2010/07/02(金) 06:11:49 ] できました! ttp://www15.plala.or.jp/NovemberKou/programming/2ndGeneration/2ndHome/RMGWindowController/fixCrashDnD.html を参考にしました。 NSArrayの使用サンプルはみんな、1関数内で処理が終了してるものばかりで、なかなか見つかりませんでした。 おじゃましました。
973 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 18:57:59 ] [NSHoge hoge~~] ってのは自動で autorelease に登録されてると覚えよう。
974 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 20:38:07 ] とは限らないけどね