名称未設定<>sage<>2008/10/26(日) 03:42:50 ID:Ato5tySs0<> 前スレ
Cocoaはさっぱり!!! version.X(10)
http://pc11.2ch.net/test/read.cgi/mac/1211290055/

Cocoaはさっぱり!!! version.9
http://pc11.2ch.net/test/read.cgi/mac/1201106820/
Cocoaはさっぱり!!! version.8
http://pc11.2ch.net/test/read.cgi/mac/1179498292/
Cocoaはさっぱり!!! version.7
http://pc11.2ch.net/test/read.cgi/mac/1161486802/
Cocoaはさっぱり!!! version.6
http://pc11.2ch.net/test/read.cgi/mac/1146391229/
Cocoaはさっぱり!!! version.5
http://pc11.2ch.net/test/read.cgi/mac/1124986925/
Cocoaはさっぱり!!! version.4
http://pc11.2ch.net/test/read.cgi/mac/1091927026/
Cocoaはさっぱり!!! Version.3
http://pc5.2ch.net/test/read.cgi/mac/1063295248/
Cocoaはさっぱり!version:2
http://pc11.2ch.net/test/read.cgi/mac/1036923528/
Cocoaはさっぱり!
http://pc11.2ch.net/test/read.cgi/mac/1007632025/ <>Cocoaはさっぱり!!! version.11 名称未設定<>sage<>2008/10/26(日) 03:43:22 ID:Ato5tySs0<> 関連スレ
Macでプログラミング{9}
http://pc11.2ch.net/test/read.cgi/mac/1216824430/
MacOS XをUnixとして使ってる人の為のスレ その14
http://pc11.2ch.net/test/read.cgi/mac/1216715423/
Xcode part7
http://pc11.2ch.net/test/read.cgi/mac/1218774554/
MacでJava その4
http://pc11.2ch.net/test/read.cgi/mac/1214284891/
RubyCocoa 初心者質問【Leopardバンドル記念】
http://pc11.2ch.net/test/read.cgi/mac/1193373811/
AppleScript アップルスクリプト 質問、発表 3
http://pc11.2ch.net/test/read.cgi/mac/1223026902/
Cocoaリファレンス日本語化計画
http://pc11.2ch.net/test/read.cgi/mac/1207312910/ <> 名称未設定<>sage<>2008/10/26(日) 19:27:40 ID:Ob0KlCLP0<> >>1

あと、こんなの見つけた。
http://cocoawiki.aerial.st/index.php?FrontPage

まだ情報少ないみたいだけど、メモ代わりに使わせてもらおっと
<> 名称未設定<>sage<>2008/10/27(月) 17:43:20 ID:9uBJK4c00<> いちもつ <> 名称未設定<>sage<>2008/10/28(火) 00:59:41 ID:YdtXB3i50<> テンプレに英語系 Cocoa 役立ちサイトを追加:
本家ドキュメント
http://developer.apple.com/referencelibrary/Cocoa/
わかりやすいチュートリアル
http://cocoadevcentral.com/
Cocoa に関する Wiki
http://cocoadev.com/
Cocoa blog 一覧
http://cocoablogs.com/

だれか日本語の Cocoa サイトをまとめて。 <> 名称未設定<>sage<>2008/10/28(火) 01:32:23 ID:UXhSYK7I0<> >>5

>>3のwikiにある中から、代表的なもので

Cocoaはやっぱり!
http://www.big.or.jp/~crane/cocoa/

HMDT
http://homepage.mac.com/mkino2/

OOMORI.com - Cocoaリファレンス
http://www.oomori.com/cocoafw/

こんなとこ?

あと、Cocoa Bindingの例探してて見つかった、

Cocoaで遊ぼう!!
http://homepage.mac.com/t_yamane/prog/index.html

ほかにもオヌヌメあったら、ヨロシコ <> 名称未設定<>sage<>2008/10/28(火) 01:41:19 ID:Fus9Bxnw0<> Cocoa Break!
http://park15.wakwak.com/~concordia/cocoa_break/index.html

Cocoa Bindings Examples and Hints
http://homepage.mac.com/mmalc/CocoaExamples/controllers.html <> 名称未設定<><>2008/10/28(火) 10:47:25 ID:e40mOyml0<> とりあえず良さげな知っている所を挙げてみる
Omni Developer
http://www.omnigroup.com/developer/

Mac♪Mac♪Mac♪
http://www.macmacmac.mydns.jp/modules/tinyd0/

Repeating Motif Wonderland
http://www15.plala.or.jp/NovemberKou/index.html

みるくCocoa
http://www.stripe-net.jp/cocoa/ <> 名称未設定<>sage<>2008/10/28(火) 12:34:15 ID:/p+sPRRh0<> 全然書き込みないけど

Carbonはさっぱり!!!
http://pc11.2ch.net/test/read.cgi/mac/1217108500/ <> 名称未設定<>sage<>2008/10/28(火) 18:29:50 ID:e40mOyml0<> あ、これ忘れてあげないで。
Objective-C [ObjC part:3];
http://pc11.2ch.net/test/read.cgi/tech/1186543111/

【マック】Macintoshプログラミング質問箱
http://pc11.2ch.net/test/read.cgi/tech/1113058054/

【Cocoa】Macプログラマのスレ【Objective-C】
http://pc11.2ch.net/test/read.cgi/prog/1214208397/ <> 名称未設定<>sage<>2008/10/28(火) 18:47:24 ID:/p+sPRRh0<> OmniGraffleやOffice 2004(たぶん2008も)のUtility Windowのように、
ドラッグにより、Window同士がある程度近づくと、ドラッグがある程度離れるまで、
ぴったりくっついた状態をキープする動きを実装したいのです。

Windowの位置が近くかどうかは、WindowサブクラスのmouseDragged:内で、位置を取得して割り出せました。
で、Windowがくっついた位置をキープしたいのですが、この方法が分かりませんでした。

mouseDragged:内で、[NSWindow setFrameOrigin:]などで位置を強制的に固定しようとしても、
mouseUp:になるまで効きませんでした。どうすればいいのでしょう? <> 名称未設定<>sage<>2008/10/28(火) 21:40:46 ID:iCg2NlHu0<> >>11
http://www.literatureandlatte.com/freestuff/index.html
にある、KBPalettePanelExampleがそれっぽい挙動実装してるよ。 <> 11<>sage<>2008/10/29(水) 19:46:15 ID:lZE7N+XQ0<> >>12
まさにこれですね。じっくり見てみます。
とりあえずありがとうございます。 <> 名称未設定<>sage<>2008/10/29(水) 22:02:38 ID:cQqhv9zc0<> MallocDebugについて質問
MallocDebugで起動し、PopupButtonからLeaksを選択するとリークしているものが表示されると思っている。
次の手順で作ったアプリでリークが検出されるんだけど、本当にリークしているのか
MallocDebugが誤動作しているのかどっちなんでしょうか。

Xcode3.1 OS10.5.5 MallocDebug1.7.1(89.0)
Cocoa Applicationのテンプレートで新規作成
クラス作成
@interface MYObject : NSObject {
IBOutlet NSTextField *textField;
}
-(IBAction)button:(id)sender;
@end

@implementation MYObject
-(IBAction)button:(id)sender
{
[textField setStringValue:@"string"];
}
@end

WindowにNSTextFieldとNSButtonを配置し、アウトレットとアクションをセットし完成。

手順:
テキストフィールドに入力したり、消したり、ボタンを押したりしてから
MallocDebugでリークをチェックするとリークしているように見える。
(272 0x1>こんな感じになってます。272は操作を繰り返すと増えていきます。)
書いてて気にしないのが良いように思えてきた。 <> 名称未設定<>sage<>2008/10/30(木) 16:30:52 ID:01X0n4GO0<> オブジェクトのディープコピーをするにはどうしたらいいですか? <> 名称未設定<>sage<>2008/10/30(木) 23:25:40 ID:sjApbA2/0<> 自分でメソッドかけば仕舞いだと思いますが。
めんどくさければ、
NSKeyedArchiver で NSData にかためて、
NSKeyedUnArchiver で NSData にとかせばディープコピーになるんでは? <> 名称未設定<>sage<>2008/10/31(金) 00:07:46 ID:WY8mn5mD0<> 俺いつもそうやってるw <> 名称未設定<>sage<>2008/10/31(金) 00:22:36 ID:Ijy6iEQp0<> >>15
ここ読むといいかもしれない。
http://journal.mycom.co.jp/column/objc/058/index.html <> 名称未設定<>sage<>2008/10/31(金) 10:11:29 ID:nFHujBCu0<> >>14
まあ自分では対処しようがないんだから気にすることは無いんじゃない?
あと@"string"をインスタンス変数に入れて
初期化が一回だけになるようにしたらどうだろう?
たしか文字定数は初期化一回だけのはずではあるけど <> 名称未設定<><>2008/10/31(金) 22:16:59 ID:9ab+JRCT0<> Xcode 3.1/Mac OS 10.5.5 (intel)
MacBookとか、iMacとかのモデル名を取得する方法ってあるでしょうか。 <> 名称未設定<><>2008/10/31(金) 22:30:21 ID:3evJZ2XL0<> >>20
ハードウエアの情報については、開発ツールのIORegistryExplorerで目的のものがあるか探してくれ <> 名称未設定<>sage<>2008/10/31(金) 22:34:21 ID:cB2Q2v1H0<> ADCの日本語ドキュメントを見ながら初Cocoaに触れてますが、チュートリアルでいきなりつまずきました。
ttp://developer.apple.com/jp/documentation/Cocoa/Conceptual/ObjCTutorial/06Controller/chapter_6_section_6.html
ここで
> ConverterController.hファイルを選択して「開く」をクリックします。
とありますが、これをやっても何もおきません。図5-3のようにもならなければエラーも出ません。
何が原因でしょうか??? <> 名称未設定<>sage<>2008/10/31(金) 22:42:52 ID:23e1rSMO0<> なにもおきなくて正解です。単にその操作は、
.h に書かれている内容を IB に教えてあげるだけです。
図 5.3 のようにするには、ステップ 3 をしないといけないです。
ライブラリから青い立方体のをドラッグ&ドロップして、
クラス名を NSObject から ConverterController にしてやらないといけないです。 <> 22<>sage<>2008/10/31(金) 22:53:59 ID:cB2Q2v1H0<> >>23
おお!なるほど!できました!
それにしても紛らわしい書き方ですね…。 <> 名称未設定<>sage<>2008/10/31(金) 23:04:11 ID:23e1rSMO0<> Apple のかわりにあやまっておきます。ごめんなさい。
あと、普通は 2. のステップ (.h を開く もしくは IB にドロップ) は
IB が自動的に XCode に登録されてる .h を全部監視しているので
しなくてもいいんですが、ときどき IB が混乱して
新しい .h を読まなかったりするので、やり方は覚えておいたほうがいいでしょう。

まあ頑張ってね :) 仕組みがわかれば IB は快適です。 <> 名称未設定<>sage<>2008/11/01(土) 01:11:52 ID:n4dRfqKu0<> >>21
ありがとうございます。見つかりました。
Macにもレジストリってあったんですか…。
<> 名称未設定<>sage<>2008/11/01(土) 01:17:48 ID:nRvsaBqW0<> てめー、Mr. Registry.appさんにケンカうってんのか <> 名称未設定<>sage<>2008/11/01(土) 03:04:31 ID:ABXtPrBS0<> RegistryはMicrosoftの登録商標ですか <> 名称未設定<>sage<>2008/11/01(土) 04:53:05 ID:lyFOviiP0<> iPhoneで何か作るか〜と昔買ったヒレガス本を引っ張り出してきて
まーとりあえず、cocoaでOSX用乱数発生アプリを手本通りに組んで
追々思い出しながら手慣らしを〜・・・

インターフェースビルダにツールバーが無ぇ!(笑
”システムフォント”はどこだ?(笑
NSObjectのサブクラスを・・・ってClassメニューはどこ行った!?(今日はここまでw

Xcode3(というかインターフェースビルダーというか)が変わってて
昔の本の記述が役に立たねぇ orz <> 名称未設定<>sage<>2008/11/01(土) 12:13:33 ID:azplz7rR0<> つうかCocoaの「たのココ」とかチュートリアルとか、
に何となく簡単そうに見える本から入っていく初心者って、
IBでGUI作ったりチュートリアルのコピペあたりで終わって
つまづいて進歩しないか、飽きていくのがほとんど。

ちゃんとC言語、オブジェクト指向、Objective-C、と基礎から
積み上げて行かないと、いくらやっても表面なでてるだけで、
まともに書けるようにならないよ。 <> 名称未設定<>sage<>2008/11/01(土) 12:39:28 ID:IrrqNq8q0<> 確かに今活躍してるCocoa開発者はNeXTのときにみっちり身につけてる人らばっかりだもんな。 <> 名称未設定<>sage<>2008/11/01(土) 12:57:52 ID:5Mi4Vs1D0<> MacOSXがリリースされてから、すでに7年はたっている。
これだけ時間があれば、NeXTを知らなくても、Cocoaを身につけられる <> 名称未設定<>sage<>2008/11/01(土) 13:00:28 ID:suYAyqpA0<> んなことはない。「たのココ」は知らんが、俺は「ヒレガス本」から入った。
後はサンプルをつまみ食いしつつ、AppleのサイトのApplicationKitと
Foundationのクラスのドキュメントを読めば何とでもなる。Cを知らないと
話にならんが、最初からObjective-Cをすべて網羅する必要はない。

それこそ、CとかObjective-Cの基礎からやってたんでは飽きてしまって
Cocoaに辿り着けなくなるのがオチだ。

NeXTからやってる奴なんてごく少数だ。 <> 名称未設定<>sage<>2008/11/01(土) 13:02:11 ID:suYAyqpA0<> >>33>>30>>31へのレスだよ。 <> 名称未設定<>sage<>2008/11/01(土) 13:13:39 ID:9deuPHbB0<> 俺も>>33と同意見

俺はプログラミングド素人
Macも6月に買ったばかり
未だに「オブジェクト指向?」「クラス?」「メソッド?」なレベルなんだけど
「たのCoco」とサンプルを参考にして既にiPhoneアプリを一本リリースした
これがそこそこ売れてしまったのでモチベーションUP!!

最近ようやくCの入門書を買って読み始めた
最初にCの入門書を読んでいたら確実に挫折していたと確信している <> 名称未設定<>sage<>2008/11/01(土) 17:13:04 ID:fjrubA2a0<> >>35
何作ったの? <> 名称未設定<>sage<>2008/11/01(土) 17:58:25 ID:n4dRfqKu0 BE:226400933-2BP(1235)<> sssp://img.2ch.net/ico/si.gif
>>35
有料化できるアプリってどういうのなんだろ。
やっぱちゃんと作らないといけないイメージがある。
あと、レジストキー関係のプログラムが面倒くさそう。
適当でも良いんだけど、適当だと簡単に破られるしね。
そこらへん、iPhoneは有料アプリ組みやすいのかな?

俺の暇つぶし集↓今んとこ全部無料。
http://www.smilemac.com/ <> 名称未設定<>sage<>2008/11/01(土) 19:57:18 ID:azplz7rR0<> C言語からはじめる必要はないか。
ただIBで遊んだりチュートリアルのコピペをしばらく
楽しんだら、ある程度基礎的なことも理解していく必要は
あると思うけどね。

その点で、
> 最近ようやくCの入門書を買って読み始めた
という>>35はもう次のステップにうつっているから
良いんだけど、そういうステップに行く前に挫折する人が多いのも
事実。 <> 名称未設定<>sage<>2008/11/01(土) 20:06:00 ID:ABXtPrBS0<> Cすらも分からんのに何やるのさ <> 14<>sage<>2008/11/01(土) 20:41:08 ID:pd2MLZdJ0<> >>19
元々はCocoaバインディングを使ってみて同じ現象になったんでバインディングの
使い方が悪いのかと思ってたんですが、使わなくてもなったんでデバッガの使い方が
悪いのかと思って質問しました。
気にしないことにします。

>>35の行動力は凄いな。 <> 名称未設定<>sage<>2008/11/01(土) 23:23:16 ID:/+/D9BW40<> >>37
>あと、レジストキー関係のプログラムが面倒くさそう
iPhone の場合はそのあたりは全部 AppStore が面倒見てくれるので
なにも書かなくていい。 <> 名称未設定<>sage<>2008/11/01(土) 23:32:13 ID:sVr4qJRL0<> >>37
誰かと思ったらMacNicoPlayerの作者さんじゃないかw
暇つぶしとかそんなまた謙遜を。

なんか35見て感動したのでたのCocoAmazonで買ってくるか。 <> 名称未設定<>sage<>2008/11/02(日) 00:12:33 ID:lKREfCNZ0<> >>35はかなりセンスあるんだな。
俺は趣味グラマ長いけど、未だにInterfaceBuilderには馴染めない。(泣 <> 名称未設定<>sage<>2008/11/02(日) 00:23:21 ID:HoLoopJM0<> >>43
習うより慣れろ。by パソコンサンデー おヅラも出てたな。 <> 名称未設定<>sage<>2008/11/02(日) 00:36:37 ID:lKREfCNZ0<> パソコンサンデー・・・
何もかもが懐かしい。
スレ違いスマン。 <> 35<>sage<>2008/11/02(日) 00:45:43 ID:lImmlfsv0<> iPhone Dev Centerのドキュメントとサンプルコードが充実していたので
なんとか一本書けた感じです
http://developer.apple.com/iphone/

細かいことはとりあえず気にせずに
とにかく一本AppStoreに出してみようじゃないか!
という勢いだけで突き進みました

課金については>>41の通り
料金をプルダウンメニューから選ぶだけです
もちろんFreeでもいいです

どんなに小さなアプリでも
とにかく一本完成させたことが大きな自信につながったので
小難しいことは軽くスルーしつつ一本作って公開してみるといいと思います
その点、iPhoneのAppStoreは小さいアプリをぽんぽん出せるのでおもしろいです

今後はOSXのアプリにも挑戦したいですねー <> 名称未設定<>sage<>2008/11/02(日) 01:00:42 ID:MKapFhX90<> >>41
ほぉ、そうなのか。
ところで、$99払えば誰でもアプリ売れるの?
それとも審査とかがあるのかなぁ。
Developer Connectionは日本語文字化けするので、買い物用のApple IDとは別のIDにしてるんだが、もし審査あるのなら、メイン垢のほうが良さげ?
日本語名の垢でやるとフォーラムとかで自分の名前化けそうなんだよな。
そこらへん誰かkwsk。

>>46
iPhone開発って難しいイメージあったんだが、iPhone SDKのリファレンス見たら、そうでもないのか。
Cocoaアプリ作る要領で、リファレンス見ながらやればすぐいける感じかな?
ちょっくら作ってみるか、実機もって無いけどorz <> 名称未設定<>sage<>2008/11/02(日) 01:11:24 ID:lImmlfsv0<> >>47
シミュレータで動かすだけなら無料
実機転送とAppStoreに公開したいのなら$99払う必要有り

アカウントの文字化け問題には俺を含めてかなり多くの日本人が悩まされているけど
「文字化けしてるから直してくれ!」って根気よくADCにメールすればそのうち直るw
これは人によっていろんなケースがあるから一概には言えない

iPhone開発に関しては
プログラミング経験のほとんどない俺が
Macを初めて買って一ヶ月ちょっとでリリースまでこぎつけられたことを考えると
ハードルは高くないはず

アプリは提出すると審査があって
脆弱性とかエログロとかがあると却下される
でもどこが悪いのか教えてくれるから直しやすい

詳しくはiPhone開発スレで
http://pc11.2ch.net/test/read.cgi/mac/1224089976/ <> 名称未設定<>sage<>2008/11/02(日) 02:08:28 ID:lyXSXRrr0<> バカお前ら騙されるな
>>35 = mkino (=たのcocoの著者) だ!!
>>35は宣伝なんだよ!! <> 名称未設定<>sage<>2008/11/02(日) 02:09:20 ID:j7DXTstY0<> ΩΩΩ < 何だって〜〜! <> 名称未設定<><>2008/11/02(日) 02:20:49 ID:fJQfdcGh0<> やられた!
>>35 見て、今すぐ書店に急いじゃったぜ! <> 名称未設定<>sage<>2008/11/02(日) 03:34:40 ID:Y374j0B40<> アメリカの会社なのに社会主義的でおかしいよね <> 名称未設定<>sage<>2008/11/02(日) 04:03:29 ID:sEZUqidf0<> >>35は売り上げを晒すかアプリを晒して欲しい。
<> 名称未設定<>sage<>2008/11/02(日) 04:10:21 ID:Y6GegVsr0<> なんで49とか53はそう悪意というか疑いの目で35を見るかな....
嫉妬でもしてるのか?
<> 名称未設定<>sage<>2008/11/02(日) 04:29:03 ID:9VM5jO2v0<> iPhoneのアプリ作ってる人ってカタギじゃないですよね? <> 名称未設定<>sage<>2008/11/02(日) 04:55:14 ID:CejDTsgr0<> >>54
パソコンサンデーとか言って通じる辺り、たぶんここの平均年齢層は高いのだと思うが、
そういう世代にとって、プログラミングというのは「模型を作る」のと同じレベルの趣味で、
さーて、なんかiPhoneだと世界相手にプログラム作って売れるらしいからなー
こりゃ面白い、あーでもMSXマガジンの頃はいくらでもアイデア出たのに、
長年離れてたら勘が鈍ったなー まーcocoaの作法覚えながら、また少しずつ鍛えるかー
ぐらいのもんなんだが、

「プログラミング」っていうのがひょいとパソコンを買ってきたら普通にできるホビー。

じゃなくて、プログラミングというのは専門学校かなにかで習って、
企業に就職したプロが、プロジェクトチームでカネを掛けてやるもの。
ってことに(その子の中では)なってる子が、
これ系の別スレにも迷い込んでて周りと話がかみ合ってなかった。 <> 名称未設定<>sage<>2008/11/02(日) 05:26:20 ID:Y6GegVsr0<> 自分はパソコンサンデー?なにそれ?って感じの世代だがそのホビーとしてのプログラミングって言う発想は分かる。

まだ自分がMacユーザーではなかったときに一番最初にいじった言語はなでしこ(http://nadesi.com/)だったなそういえば。
その後JavascriptをちょっといじってからMacに移動して、AutomatorとAppleScriptに興奮して、最近たのCoCo版Tigerを買ってXcode 2.x系列を落として色々やっていたらLeopard版が出てしまったというのが現状。

でもそういえば自分は文系だった気がする。おかしいかな? <> 35<>sage<>2008/11/02(日) 07:17:52 ID:lImmlfsv0<> パソコンサンデー?
なんだか方向がズレてきてるけど
とりあえず自分が言いたかったことは

・C言語からはじめて挫折するよりも、細かいところには目をつぶってサンプルコードを参考にしてとにかく何か一本完成させて公開までもっていく
・これにはiPhoneアプリが最適なのではないか
(Appleの審査があるので無自覚に危険なアプリをばらまいてしまう恐れも無いし、メンテや課金も簡単)

こんな感じです

アプリは実名で出しているのでアプリ名晒しは勘弁してください
これまでの売り上げはMacBookが買える程度です
売り上げのほとんどが海外です(これもiPhoneアプリのおもしろいところ!)
ではみなさんもがんばって! <> 名称未設定<>sage<>2008/11/02(日) 09:39:27 ID:3POzmbdQ0<> ObjC (Cocoa) + IB ってのが、簡易言語的な感じでとっつきやすいんだろうね。
で、実用的なGUIなアプリが割と楽に作れるし、達成感もあると。

素のC言語から初めて、何か人に使ってもらえるものを作るとなったら、
結構な道のりだからなあ。

iPhoneのアプリなんかは、単純なプログラミングの技術より、何かいい発想の
ある人の方が面白いものを作れる可能性が高いような気がする。 <> 名称未設定<>sage<>2008/11/02(日) 10:18:24 ID:anI9QKlo0<> 35が宣伝でも構わんが、たのCocoは正直オススメできない。
内容も薄いし、理解させようと言う意識が感じられない。
入門ならヒレガス本をオススメする。 <> 名称未設定<>sage<>2008/11/02(日) 10:21:52 ID:sje4Pdr1P<> しかしIBのインターフェースが変わったのがヒレガス本としては痛いな
早く新版でないかなー
<> 名称未設定<>sage<>2008/11/02(日) 10:28:52 ID:Y6GegVsr0<> もう新版出てないか?>ヒレガス
http://www.amazon.co.jp/exec/obidos/ASIN/0321503619/
Amazonには2001,2004,2008が全部売られているけどタイトルで分類しているせいか全てに同じ内容の商品説明とカスタマーレビューがついていて混乱する。 <> 名称未設定<>sage<>2008/11/02(日) 10:54:58 ID:3Vx+y2lH0<> >>62
たぶん>>61は和訳されたものが欲しいのだと思う。

俺も旧版の和訳しか持っていないので
新版出てくれるとありがたい。 <> 名称未設定<>sage<>2008/11/02(日) 19:07:02 ID:/LuXh8CU0<> >>29

好きに使え、って書いてあったから、XCode3用のチュートリアル書いてみた。
http://cocoawiki.aerial.st/index.php?Cocoa%20Bnding%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%91

でも画像あげれないから超分かりにくいね、これ。 <> 名称未設定<>sage<>2008/11/02(日) 19:14:03 ID:MKapFhX90<> http://developer.apple.com/jp/documentation/Cocoa/Conceptual/ObjCTutorial/05View/chapter_5_section_1.html#//apple_ref/doc/uid/TP40000863-CH7-SW1 <> 名称未設定<>sage<>2008/11/02(日) 21:02:55 ID:mqh/+RaW0<> すみません、質問です。
アプリを起動した直後に特定のテキストフィールドなどにフォーカスを
当てたいのですが、どうすればよいのでしょうか? <> 名称未設定<>sage<>2008/11/02(日) 21:06:32 ID:sje4Pdr1P<> >>64
コメントありがとね
画像アップはちょっとまってて、
2、3日でリアルが片付くから、それからやります
不便をさせて申し訳ない <> 名称未設定<>sage<>2008/11/02(日) 21:54:10 ID:lKREfCNZ0<> ここ数日ADCのレスポンスが異常に悪いんですが、皆さんいかがですか?
Software Updateもタイムアウトで完了できない有様で・・・。 <> 名称未設定<>sage<>2008/11/02(日) 22:03:51 ID:Y6GegVsr0<> >>68
Snow Leopardの新seedのせいとか? <> 名称未設定<>sage<>2008/11/02(日) 22:03:55 ID:rI4hnwUX0<> >>64
Cocoa Bndingになってる <> 名称未設定<>sage<>2008/11/02(日) 22:11:09 ID:MKapFhX90<> >>68
-(void)awakeFromNib{
[myField becomeFirstResponder];
} <> 名称未設定<>sage<>2008/11/02(日) 22:11:42 ID:MKapFhX90<> ごめん、安価ミス
>>66宛。 <> 名称未設定<>sage<>2008/11/02(日) 23:48:27 ID:mqh/+RaW0<> >>71
ありがとうございます。
ちなみに調べていて

[myWindow makeFirstResponder:myField];

でも行けたのですが、どちらも同じですかね?

<> 11<>sage<>2008/11/03(月) 00:21:48 ID:3VCrO+9U0<> 通りすがりだけど
becomeFirstResponder
には

Use the NSWindow makeFirstResponder: method, not this method, to make an object the first responder. Never invoke this method directly.

とあるね <> 名称未設定<>sage<>2008/11/03(月) 00:58:24 ID:Hr4zrpPq0<> becomeFirstResponderってオーバーライド用じゃなかったっけ? <> 名称未設定<>sage<>2008/11/03(月) 02:17:40 ID:qCH2Sci10<> OSX10.3辺りで一時期cocoaに触れて、
その時に作ったソフトが起動すらしなくなったので改めて一から作り直そうと
久々にcocoaに再挑戦する所なのですが、
レオパルドの開発環境では何か根本的に作り方が変わったりしてるんでしょうか? <> 名称未設定<>sage<>2008/11/03(月) 02:44:14 ID:1yy3U75q0<> 再ビルドすれば起動するんじゃないの

IBが変わりすぎて慣れるのに時間がかかる。 <> 名称未設定<>sage<>2008/11/03(月) 02:52:02 ID:mTkV4jRn0<> >>74-75
73ですけどご意見ありがとうございます。
makeFirstResponder を使った方が良いという事ですよね。
<> 76<>sage<>2008/11/03(月) 03:22:30 ID:qCH2Sci10<> 以前改良しようと中途半端に手を加えた場所等、
もう全体構造が判らなくなってるので一から作った方が早いと思ったからです。 <> 名称未設定<>sage<>2008/11/03(月) 03:36:44 ID:Foy84T9X0<> いや、プログラムのサイズにもよるけど、
がんばって思い出してみたほうがいいんじゃないかな。
とりあえずは昔のプロジェクトを最新の xcode で開いて、
コンパイルしてみるのをおすすめします。
なにか 10.5 になってなくなった/挙動がかわった
API をつかってるのかもしれないし ...
デバッガでどこで落ちてるのかを調べるだけでもちがうでしょう。

別に本質的にはなにもかわってませんよ。
いろいろ Cocoa の API が増えてるのを除けば。
(CoreData, Binding とか... Binding は 10.3 にもあったっけ?)

>>77 さんもいうように
IB3 は IB2 からかなり変わりましたが、outlet / target の考え方はかわらないし。
クラスは IB 側で作らずに XCode で作ることが推奨されるようになったぐらい? <> 名称未設定<>sage<>2008/11/03(月) 10:01:54 ID:DCZONU6Z0<> >>73
IBでwindowのinitialFirstResponderとテキストフィールドを繋げてもできた
後はnextKeyViewを繋げていけばタブキーの移動が制御できた <> 名称未設定<>sage<>2008/11/03(月) 10:02:46 ID:dKQvPNo00<> >>78
becomeFirstResponderは「自分がFirstResponderになるか否か」を返すためのもの。
FirstResponderにしないビューを作りたい場合、
becomeFirstResponderをオーバーライドしてNOを返せば良い。

- (BOOL)becomeFirstResponder {
return NO;
} <> 名称未設定<>sage<>2008/11/03(月) 18:19:30 ID:jVQJ8W/E0<> unsigned int hoge = 4264034304;
NSData *hogedata = [NSData dataWithBytes:&hoge length:4];
NSLog(@"hoge is %d, hogedata is %@" , hoge, hogedata);

とやってコンソールの出力を見ると
hoge is -30932992, hogedata is <000028fe>
となります。
32bitなので unsigned int なら4264034304(0xfe280000)はきちんと表示されると思ったのですが、
この-30932992や<000028fe>はどうして出力されるのでしょうか?
<> 名称未設定<>sage<>2008/11/03(月) 19:17:31 ID:+8TFOxC70<> >>83
こんな感じでどうでしょう
unsigned int hoge = 4264034304;
NSData *hogedata = [NSData dataWithBytes:&hoge length:4];
NSLog(@"hoge is %u, hogedata is %@" , hoge, hogedata);

union {
unsigned int ui;
unsigned char ch[4];
}test;

[hogedata getBytes:&test length:4];
NSLog(@"hoge2 is %u, %x, %x, %x, %x" , test.ui, test.ch[3], test.ch[2], test.ch[1], test.ch[0]);

http://developer.apple.com/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html <> 名称未設定<>sage<>2008/11/03(月) 20:07:58 ID:YM+SucNB0<> 要は符号付き/無しとエンディアンの話か。 <> 名称未設定<>sage<>2008/11/04(火) 18:54:34 ID:eYzISOw90<> ライブラリのパスの渡し方を教えてください

プロジェクトの設定でライブラリ検索にパスを渡しても
エラーが生じます。

ちなみにヘッダファイルのパスは上手く通ります。 <> 名称未設定<>sage<>2008/11/04(火) 23:33:36 ID:G6xtfucg0<> >>86
スタティックライブラリ(.a?)ならファイルが並んでるツリーのところで
右クリック->追加->既存のファイルでライブラリファイルを選択
同様にヘッダファイルを追加してビルドすればできたっぽい
プロジェクトの設定とかはいじってない <> 87<>sage<>2008/11/04(火) 23:38:48 ID:G6xtfucg0<> >>87に追記
*.a、*.hの追加時にコピーは作っても作らなくてもできた <> 名称未設定<>sage<>2008/11/04(火) 23:41:04 ID:eYzISOw90<> >>87
ありがとうございます。
明日確認してみます。
<> 名称未設定<>sage<>2008/11/05(水) 21:09:37 ID:19atskXb0<> NSTableView内のセルを編集可能にして
セルの内容をプログラム内で読めるようにしたいのですが、
どのようなメソッドを使えばいいのでしょうか?

変更した時点でデータを読みに行く必要は無くて、
適当なタイミングで(Save Buttonを押した時とか)読めればいいのですが。

元々用意してたデータをNSTableViewに表示までは出来るようになったのですが。。。 <> 名称未設定<>sage<>2008/11/05(水) 22:03:03 ID:bThhRr9i0<> >>90
tableView:setObjectValue:forTableColumn:row:

セルの内容が変更になった時に呼ばれるから、
該当するデータを差し替えれば良い。 <> 76<>sage<>2008/11/06(木) 08:26:12 ID:8NSMQDOL0<> 遅れながら、言われた通りちょこっと頑張って直せました。
レオパになってメモリ管理の新機能が付いたとかチラ聞きして
その辺りも含めて立ち上がらなくなったのかとか色々考え過ぎて腰が引けてた様です。
有り難うございました。 <> 90<>sage<>2008/11/06(木) 11:23:58 ID:FHeExVxB0<> >>91さん
出来ました! 素早い解答ありがとうございます。 <> 名称未設定<>sage<>2008/11/06(木) 21:38:07 ID:5DYNPx6+0<> NSTextField内の挿入ポイントを行の最後に移動したいのですが
どうすればいいでしょうか?
moveToEndOfLine: はNSTextViewでしかできませんでした。 <> 名称未設定<>sage<>2008/11/06(木) 21:48:16 ID:4wWZp45n0<> currentEditor で NSText を取り出して moveToEndOfLine: <> 名称未設定<><>2008/11/06(木) 23:12:39 ID:xQKaLsP4P<> うちのCocoa Wikiにコメントをくれた人、いますかね?
ファイル添付機能を有効にしたので、再度編集していただけると嬉しいです。
ちなみにファイルサイズの上限は5MBです。 <> 名称未設定<>sage<>2008/11/06(木) 23:48:14 ID:5DYNPx6+0<> >>95
[[inputTextField currentEditor] moveToEndOfLine:self];
できました、ありがとうごさいます。 <> 名称未設定<>sage<>2008/11/07(金) 01:50:36 ID:ww1WLO3q0<> >>96
ありがと
マターリとやっていきます。 <> 名称未設定<>sage<>2008/11/07(金) 09:13:42 ID:Xt4hlMq90<> http://cdn1.ustream.tv/swf/4/viewer.45.swf?cid=317016
めちゃくちゃ可愛い <> 名称未設定<>sage<>2008/11/07(金) 11:15:30 ID:DD7bYBXs0<> いまいち何が問題なのかわからないので、質問させてください。
まずMyClass.hとMyClass.mで下のように実装して
@interface MyClass : NSObject {
NSMutableArray *myArray;
}
@end
@implementation MyClass
-(id)init
{
self = [super init];
if( self ){
[myArray initWithCapacity:10];
[myArray addObject:[NSNumber numberWithInteger:1]];
NSLog(@"myArray is %@", myArray);
}
return self;
}
@end
その上で、AppController.h とAppController.mで
@interface AppController : NSObject{
MyClass classObject;
}
@end
@implementation AppController
-(void)awakeFromNib
{
classObject = [[MyClass alloc] init];
}
@end
というふうに初期化してみても、コンソール出力に(NULL)しか出ません。これは何故なのでしょうか?
あとこのmyArrayをアプリケーションの起動から終了までずっと保持しておきたいのですが、ガーベジコレクションを使う場合、ルート集合から参照しておけばよいと本に書いてあります。具体的にはどうすればよいのでしょう? <> 名称未設定<>sage<>2008/11/07(金) 11:18:38 ID:I+wKqcuj0<> ↑フラッシュの穴を付いた攻撃なので注意 <> 名称未設定<>sage<>2008/11/07(金) 11:20:56 ID:Xt4hlMq90<> [myArray initWith...] じゃだめ。その時点では myArray は nil でしょ。
nil に initWith メッセージを送ってもどうしようもないです。
myArray=[NSMutableArray alloc];
として myArray に NSMutableArray のインスタンスをつくってから、
initWith... しないと。普通は組み合わせて
myArray=[[NSMutableArray alloc] initWith... ]
とするのが吉。

ルート集合って何のことなのか具体的なことが本に書いてあるはずだけど、
読みましたか?読めばどうすればよいのかこともわかるはずだけど... <> 名称未設定<>sage<>2008/11/07(金) 11:22:48 ID:Xt4hlMq90<> え。このフラッシュって悪い奴なの?ごめんなさい。
単に犬の赤ちゃんの live webcam で可愛いなあと思ってみてたんですが... <> 名称未設定<>sage<>2008/11/07(金) 12:55:31 ID:xQSQPAmW0<> それをなぜこのスレに貼る <> 100<>sage<>2008/11/07(金) 13:08:19 ID:DD7bYBXs0<> >>102さん
確かに[myArray [[NSMutableArray alloc] init..]とすると動きました。
初めて1月たつのに、まだまだ基本的な所が理解できていないようです。
本は荻原さんの詳解Objective-C2.0を読んでるんですが、
外部変数や大域変数がなんなのか、そこから参照するというのがよくわかりません。 <> 名称未設定<>sage<>2008/11/07(金) 14:08:16 ID:5c1UEXI40<> 1ヶ月で理解出来たら、世の中はObj-Cプログラマーで溢れかえってるんだぜ? <> 名称未設定<>sage<>2008/11/07(金) 16:01:22 ID:SM5nwPQ/0<> 最近プログラミングを初めようと思いCocoa本買いました。
Mac買った時に付属していたDVDからXcodeインストールしたんですが、新規プロジェクトの中のCommand Line Utilityという項目はあるんですが、その中にStanderd ToolやFoundation Toolなどが入ってません。
どうすればいいでしょうか?
素人的なことで申し訳ないです…。(-.-;) <> 名称未設定<>sage<>2008/11/07(金) 16:47:19 ID:xH5O/xya0<> 買った本は何か? Xcode のバージョンは? 何をしようとしているの? <> 名称未設定<>sage<>2008/11/07(金) 18:55:42 ID:VaKcdyjz0<> >>108
バージョンは3.0です。
買った本は木下誠「たのしいCocoaプログラミング」です。
実験用のプロジェクトをつくりたいんですが。 <> 名称未設定<><>2008/11/07(金) 19:25:52 ID:zN7DmkVq0<> NSString定数で漢字を使えない設計にした人

すぐに自殺してください。 <> 名称未設定<>sage<>2008/11/07(金) 19:35:18 ID:Qu5mLm7y0<> >>110
貴方の無知は痛々しいです。何が原因か推測さえ出来ないのですか。 <> 名称未設定<><>2008/11/07(金) 20:00:31 ID:zN7DmkVq0<> 原因はObjective-Cのアーキテクトが馬鹿だからです。 <> 名称未設定<>sage<>2008/11/07(金) 20:02:07 ID:xH5O/xya0<> たのココ(10.5)にはcommandLineAppなんて無かった気がするが…まぁ、無くても出来るよ。
新規プロジェクト>Application>Cocoa Application を選んで、適当にプロジェクト名を
つける。後はXCodeのウィンドーにある>グループとファイル>Other Sources>main.m
をいじれば良い。StanderdToolのmain.c(Cしか使わなければ、Xcode上でmain.mを選択、
右クリック>名称変更で、.c に)は、
#include <stdio.h>
int main (int argc, const char * argv[]) {
// insert code here...
printf("Hello, World!¥n");
return 0;
}
FoundationToolのmain.mは、
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// insert code here...
NSLog(@"Hello, World!");
[pool drain];
return 0;
}
なので、書き換えれば良い。 <> 名称未設定<>sage<>2008/11/07(金) 20:24:34 ID:WHDeBs4d0<> >>109
木下の本はやめた方が良いと思う。
ヒレガス本にしる。

>>112
じゃやめちまえ。
バカに付き合うほど暇なら別だが。 <> 名称未設定<>sage<>2008/11/07(金) 20:30:00 ID:qG8ur2d10<> うは、馬鹿降臨。 <> 名称未設定<>sage<>2008/11/07(金) 20:43:30 ID:7lDacPZy0<> >>110
@"漢字ひらがなアイウエオ"
で全然通りますが。 <> 名称未設定<><>2008/11/07(金) 21:03:18 ID:zN7DmkVq0<> >>116
(´ι _` ) あっそ <> 名称未設定<>sage<>2008/11/07(金) 22:33:21 ID:jHitKJj60<> てかさんざん既出だろ。 <> 名称未設定<>sage<>2008/11/07(金) 22:39:03 ID:b9cUYWPw0<> >>112
それが「objective-cの」言語仕様だと思っている時点でアホウだな。
<> 名称未設定<><>2008/11/07(金) 22:41:40 ID:wHlO12kf0<> 態度わりーw <> 名称未設定<><>2008/11/07(金) 23:08:52 ID:4BK/dCS30<> >>107
>Standerd ToolやFoundation Toolなどが入ってません

けど変だね。普通はそこに5つはいってるけどな <> 名称未設定<>sage<>2008/11/08(土) 00:22:53 ID:kXRjTak80<> @"..." の定数って、 7 bit ascii 以外は未定義だよね ???
[NSString stringWithCString: "...."
encoding: ソースコードのエンコーディング]
を使うのが安全なんではないかと思いますが。

あと、お願いだからみなさん NSString <---> char* の変換で
encoding 指定のない deprecate されてるメソッドは使わないようにしましょう。
それらのメソッドは Cocoa のデフォルトエンコーディングをつかいますが、
Cocoa のデフォルトエンコーディングは環境設定で言語を何にしているかに
依存するので、日本語環境では動いているソフトが英語環境にすると
途端に動かなくなったりその逆とかいう意味不明なバグが多発します。

これのせいで英語の作者のつくったユーティリティーが
日本語ファイル名をちゃんと扱えなかったりするので泣けます。 <> 名称未設定<>sage<>2008/11/08(土) 02:14:53 ID:HB66BG0k0<> >>122
これ何に対するレス?

>[NSString stringWithCString: "...."
>encoding: ソースコードのエンコーディング]
>を使うのが安全なんではないかと思いますが。

とりあえず autorelease されてる点は注意だよね。
それに「ソースコードのエンコーディング」ってのも、ポータビリティを考えると
どうよ、って感じがする。

>これのせいで英語の作者のつくったユーティリティーが
>日本語ファイル名をちゃんと扱えなかったりするので泣けます。

この場合はエンコーディングを指定しても本当は駄目で、
filesystemRepresentaion を使わないといけないのだが。
現実的にはUTF-8にしておけば一応大丈夫だけど。

中途半端なアドバイスをするお前に泣けたw <> 名称未設定<>sage<>2008/11/08(土) 02:46:09 ID:D6mFIMvA0<> >>113
ありがとうございました。
助かりました。(≧∇≦) <> 名称未設定<><>2008/11/08(土) 06:50:28 ID:+B195WiV0<> NSPopupButtonの項目をNSString(実質Title?)のArray以外とBindingできないでしょうか。
NSMenuItemのArrayとできちゃえばサイコーなんですが…。 <> 名称未設定<>sage<>2008/11/08(土) 08:06:27 ID:HVynMMKD0<> 超ハイパーウルトラ初心者ッス

IBでコントロールを二つ用意しそれぞれアウトレットとアクションを一つずつ持ちます。

でWindowsにテキストフィールド二つとスタートボタンがあります。

テキストフィールドはそれぞれ上記で用意した各コントロールのアウトレットと一対一でコネクトさせています。

しかし、アクションであるスタートボタンを二つのコントロールにコネクトさせることができません!
どちらか一つとコネクトさせると一方のコネクトが(勝手に!)解除されます。

スタートボタンを押すと二つのコントロールを起動させたいのですが・・・・
<> 名称未設定<>sage<>2008/11/08(土) 08:48:36 ID:SWmtZyAd0<> InterfaceBuilder で何でもできると思ったら大間違いだ <> 名称未設定<>sage<>2008/11/08(土) 09:04:59 ID:NHu1yaCo0<> >>126
Windowsってw

Actionは1つのオブジェクトにしか送信できないので、
複数のオブジェクトを動作させたい場合は中間にオブジェクトを置くのが手っ取り早い。

ボタン→中間オブジェクト┬→オブジェクト1
            └→オブジェクト2

というか、1つのアクションで完結するように設計を見直した方が良いと思うが。 <> 名称未設定<>sage<>2008/11/08(土) 11:20:51 ID:Nk749XR60<> >>125
できるよ。
ObjectがNSMenuItemのNSArrayController作ってみよう。 <> 名称未設定<><>2008/11/08(土) 20:44:39 ID:d4+4vCvN0<> 超ハイパーウルトラ初心者ッス

>>128さんの言うとおりに中間オブジェクト(Viewクラス)を作りました。
そのViewクラスにIBのテキストフィールドと結びつけるアウトレット変数を定義したのですが・・・・

そのアウトレット変数を>>128で定義されたオブジェクト1や2で使用するにはどうしたらいいのでしょうか?

参考詳細
View.hファイル
IBOutlet id textField1;
-(IBAction)startBu:(id)sender;

View.mファイル
-(IBAction)startBu{
OBJ1 obj1 =[[OBJ alloc] init];
[obj func];

OBJ.m
-(void) func{
[[textField1 setStringValue:"Hello World"]]; //ここでView.hで定義したtextField1を使用したい
} <> 名称未設定<><>2008/11/08(土) 20:51:09 ID:d4+4vCvN0<> 超ハイパーウルトラ初心者ッス

今日僕はCocoaの奇跡を見ました。
すごい、すごすぎる!

テキストフィールドをプロパティとして簡単に宣言して
等号で結べばいいだけだなんて・・・・・・・・


まー無理だろなーと思いながら試しただけなのに・・・・・ <> 名称未設定<>sage<>2008/11/08(土) 21:00:30 ID:C2KKDa3W0<> 超ハイパーウルトラ初心者ッス

今日はまだ一度もうんこ出てないのに
お腹がすきます

すごい、すごすぎる! <> 名称未設定<>sage<>2008/11/08(土) 22:00:57 ID:NHu1yaCo0<> >>130
なんか錯乱しとるから、もうちょい勉強してください。 <> 名称未設定<>sage<>2008/11/08(土) 23:46:37 ID:RNOdKyfY0<> つーか、キャラ作んなくていいよ。 <> 名称未設定<><>2008/11/09(日) 00:22:06 ID:L1s+Atna0<> Objective-C糞過ぎ

C++かJavascriptかRubyか、最悪でもJavaで書けるにしろ

つーか、Cocoaなんて廃止して、.NET Framework使えるようにしろよ <> 名称未設定<>sage<>2008/11/09(日) 00:26:57 ID:hlpGev2i0<> おまえがやれ <> 名称未設定<><>2008/11/09(日) 00:33:30 ID:L1s+Atna0<> お断りだ <> 名称未設定<>sage<>2008/11/09(日) 00:38:23 ID:IHDltFNu0<> 2行目が何を言いたいのか分からんが
C++とかJavaでやりたいならやればいいじゃん <> 名称未設定<>sage<>2008/11/09(日) 00:39:38 ID:5aT87bHO0<> 質問です。
たぶんちょっとしたことで出来るんだと思いますが、、、

あるクラスAのメソッドのループから、ウィンドウ中のラベルなどを更新って出来ますか?
ビューコントローラは別にあり、ビューコントローラをインスタンス化してメソッドを直接呼出し
と、安易な考えをしていたのですが、やはり出来ませんでした。

具体的には、ループが進むごとにウィンドウ中のラベル(進行状況%表示)を更新したいのですが、
どうすればいいでしょうか? <> 名称未設定<>sage<>2008/11/09(日) 00:42:14 ID:dKIqpJ+F0<> [labelTextField setStringValue:@"hoge"];
[labelTextField display];
これでどうか

<> 名称未設定<>sage<>2008/11/09(日) 00:42:53 ID:dKIqpJ+F0<> ループの処理を別スレッドにした方がいいけどな <> 名称未設定<><>2008/11/09(日) 00:48:20 ID:L1s+Atna0<> >>138
分からないならコメントするな。素人は黙ってろ <> 名称未設定<>sage<>2008/11/09(日) 00:49:34 ID:5aT87bHO0<> >>ID:dKIqpJ+F0
ありがとうございます!
スレッドは扱ったことないので、ちょっと勉強してきます。
その場合、ラベルをコントローラにIBOutletとして定義すると思うのですが、
ループ中からそのラベルオブジェクトを扱う事はできるんですかね?
ループの存在するクラスに定義するのは避けたいので・・ <> 名称未設定<>sage<>2008/11/09(日) 00:53:03 ID:dKIqpJ+F0<> どこで定義しても特に支障無く扱うことができると思うが
ものは試しにやってみれ <> 名称未設定<>sage<>2008/11/09(日) 01:09:57 ID:B9u3WR7L0<> メインスレッド以外からは GUI を直接いじってはいけないので、
[object performSelectorOnMainThread: ... waitUntilDone:....]
だったかなにかをつかいましょうね。 <> 名称未設定<>sage<>2008/11/09(日) 01:10:15 ID:5aT87bHO0<> なるほど、、どこからでも扱えるんですね。
ちょっと今は試せないですが、ありがとうございました!

近々自分のMacを買うつもりなので、転がりながらプログラミングしたいものです。 <> 名称未設定<>sage<>2008/11/09(日) 01:21:23 ID:fqJDb0t30<> >>145
ん、そうだっけ?
メインスレッドじゃなくてもOKでしょ?
何か制限あったと思うけど、忘れた。 <> 名称未設定<>sage<>2008/11/09(日) 01:25:37 ID:IHDltFNu0<> GUI系はメインじゃないと危険だったかと
プログレス表示に精密さを求めないならsetNeedDisplay:YESとかでもアリじゃないかな <> 名称未設定<><>2008/11/09(日) 01:28:00 ID:NDkcMBd2P<> >>135を読んで思い出したけど、
Objective-J(Cocoaを実装したJavascript?)はどうなったんだ?と思ったら、
ttp://objective-j.orgから ttp://cappuccino.org/ にリダイレクトされて、
なんかダウンロードできるようになってる。 <> 名称未設定<>sage<>2008/11/09(日) 01:34:57 ID:IHDltFNu0<> >>149を読んで意味が分かったけど、
>>135の2行目は日本語の意味が良く分からんかったってこと。まぁカリカリすんなよ。 <> 名称未設定<>sage<>2008/11/09(日) 01:53:05 ID:ROIk3bo+0<> >>135
出来ないのはお前が糞だから。俺は出来るもんね。
<> 名称未設定<>sage<>2008/11/09(日) 03:54:10 ID:B9u3WR7L0<> C 系の言語の文法をひとつでも既に知っていて、
Obj-C の文法が二日でわからないひとは何かがおかしい。
Cocoa API の全貌をつかむのは大変なのはわかるけど、
それは Obj-C の文法の問題ではないベ。 <> 名称未設定<>sage<>2008/11/09(日) 06:13:08 ID:40c4vp+k0<> .NET Frameworkのどこがいいんだがさっぱり謎だが一応。
http://www.mono-project.com/Mono:OSX <> 名称未設定<>sage<>2008/11/09(日) 08:05:26 ID:ijj+bVEA0<> 110=135でOK? <> 名称未設定<>sage<>2008/11/09(日) 08:10:56 ID:40c4vp+k0<> >>135はプログラム板のここにでも行った方がいいんじゃないか?
過疎りまくってるが。
Mac OS Xでの開発環境はどれがイイ?
http://pc11.2ch.net/test/read.cgi/tech/1163314891/ <> 名称未設定<><>2008/11/09(日) 09:30:27 ID:mFvSzNPX0<> >>125
NSPopupButtonの項目をNSString(実質Title?)のArray以外とBindingできないでしょうか。
NSMenuItemのArrayとできちゃえばサイコーなんですが…。
>>129
できるよ。
ObjectがNSMenuItemのNSArrayController作ってみよう。

125です。
すいません、言葉が足りませんでした。
NSMenuItemをaddObjectしたNSArrayControllerとバインドした場合、
・"Controller Key"は"arrangedObjects"
・"Model Key Path"は"title"
とするのが普通になると思います。
でも、これだとNSPopUpButtonクラスのaddItemWithTitleをしているような感じになり、
結局はNSStringからポップアップの各項目を作ることになっています。
当方の希望は、
・"Controller Key"は"arrangedObjects"
・"Model Key Path"は"self"
みたいな感じ(実際にこれをやってもobjectの説明がポップアップに追加されるだけです)で
NSMunuItemからポップアップの各項目を作るのが希望です。
 

<> 名称未設定<>sage<>2008/11/09(日) 09:36:30 ID:lxRIk4K/0<> >>143
ループでGUI更新が動かないのは、NSRunloopが一回りしたタイミングで
更新処理がまとめて行われるからだよね。
コードの中でループしちゃうと、NSRunloopに処理が戻らない。

自分はスレッドが面倒なので、ループをばらし、ループの中身だけ別メソッドに
して、performSelector:withObject:afterDelay: で繰り返し呼び出しに
してる。普通はスレッドにするものなの? <> 名称未設定<><>2008/11/09(日) 10:31:27 ID:L1s+Atna0<> >>152
わかるわからないではなく、Obj-Cの文法は美しくない。 <> 名称未設定<>sage<>2008/11/09(日) 11:29:50 ID:Cd0AMfEC0<> 後付け感ありまくりではあるね
シンプルに書けないのも今風ではないね
MacRubyに期待(^^; <> 名称未設定<>sage<>2008/11/09(日) 12:48:29 ID:xdgDUb6t0<> >>158
じゃあ、好きな言語を使ったら良いんじゃない?
.NET使う環境から一生出てこなくて良いよ <> 名称未設定<>sage<>2008/11/09(日) 13:00:26 ID:la8cu0hU0<> >>156
何をしたいのかわからないけど、
NSMenuのアイテムとNSPopupButtonのアイテムを同期させたい、
または同じ内容にしたいということ?
<> 名称未設定<>sage<>2008/11/09(日) 13:53:57 ID:VAAVuJ8X0<> >>158
美的感覚の問題だったのか。
じゃあまあ個人の好き嫌いだからそれでいいんじゃね?
僕は括弧の乱舞は好きだけど。

あと、メソッド名が長くてほとんど文章なので
コメントを書く必要がほとんどない、というか
プログラム自体がほとんどコメントになるのはいい点だと思う、って
これは Obj-C の文法の問題ではなくて Cocoa の API の問題か。失礼。 <> 名称未設定<>sage<>2008/11/09(日) 14:43:48 ID:YNFGyvs40<> 文法的に美しく無いとされるフランス語にも素晴らしい文学は存在する。
Objective-Cに文句を言うのは勝手だが、
経験豊富なプログラマであれば言語に左右されない美しいアプリを作れるはず。 <> 名称未設定<>sage<>2008/11/09(日) 15:18:38 ID:uAivnwgs0<> そういうこと言うと、論点ずらしって言われるぞ。 <> 名称未設定<>sage<>2008/11/09(日) 15:20:17 ID:YNFGyvs40<> >>164
撒き餌を食うなよw <> 名称未設定<>sage<>2008/11/09(日) 16:00:55 ID:cf3ZhWey0<> あれじゃないの?
iPhoneのアプリ開発とか注目されてきてるからObj-Cで組んでみようと思ったけど
VBしか経験がなくて文法の違いが吸収できず、HelloWorldすら出せずにイライラしたとか。 <> 名称未設定<>sage<>2008/11/09(日) 16:05:18 ID:YNFGyvs40<> >>166
それはあるよな。
iPhone出てから「初心者です」みたいなのが増えた。 <> 名称未設定<><>2008/11/09(日) 16:23:25 ID:mFvSzNPX0<> >>161
はい、だいたいそういう内容です。
title以外の内容があるアイテムとか、セパレータとか、NSMenuItem自体には
いろいろな状態があるので、そういった状態を抱えたまま同期したいのが希望です。 <> 名称未設定<>sage<>2008/11/09(日) 16:42:55 ID:HoxfCMO50<> 俺はObjective-Cの簡潔なオブジェクトシステムが好きだ。しばらくすると一風変わったメッセージ式にも愛着がわいてくる。 <> 名称未設定<><>2008/11/09(日) 17:14:50 ID:L1s+Atna0<> お前らの言いたいことはわかった。「オラの方言が最高だべさ」ってことだろ。一生時代遅れの田舎言語使ってろ。 <> 名称未設定<>sage<>2008/11/09(日) 17:23:45 ID:XOOSfoZw0<> はいはい田舎田舎。
厨房発言に上げ荒し、おまけにドトネト最高か。
まじでVB厨のバカ丸出しだな。 <> 名称未設定<>sage<>2008/11/09(日) 17:25:12 ID:40c4vp+k0<> 田舎の方が味があって和むんだよ。それが分からないとはまだまだだな。 <> 名称未設定<><>2008/11/09(日) 17:34:46 ID:BSsYOmbX0<> 言語とか処理系て、どうせ借り物でしょw
目的は何だ?金?w
だったら冷や汗たらして働けw
何か作りたいものがあるなら最適な手段を選べばいいだけ <> 名称未設定<>sage<>2008/11/09(日) 18:06:51 ID:YNFGyvs40<> iPhoneで小遣い稼ぎしようと思ったけど
理解できなくて八つ当たりしてるだけだろ。 <> 名称未設定<>sage<>2008/11/09(日) 18:49:44 ID:Cd0AMfEC0<> まあ誰がなんと言おうとObjectiveC++ は最強だと思うけどね
C++/CLIよりも使い易いし、判り易い

でも、ちょっと古い感じはするね
MacRubyに(ry <> 名称未設定<>sage<>2008/11/09(日) 19:17:05 ID:oz3XxqjX0<> Objective-C++は最強にカオスってことですねわかりまs <> 名称未設定<>sage<>2008/11/09(日) 20:05:06 ID:n+KcZ/pQ0<> 心の寂しい方がいらっしゃる様ですね
きっと心だけでなくプログラムも隙間だらけなのでしょう <> 名称未設定<>sage<>2008/11/09(日) 21:06:35 ID:Se6LpMt+0<> >>158
Ruby でも Java でも C++ でも JavaScript でも出来ますが、何か? <> 名称未設定<>sage<>2008/11/10(月) 01:51:16 ID:5p8Fyhi10<> Ruby → RubyCocoa か MacRuby 。 MacRuby は Apple が開発していて大本命ぽい?
Python → PyObjC。
Perl → CamelBones というオープンソースのがある。
Java → Cocoa-Java があったけど、捨てられました。Java の object システムが硬いのが問題?
Javascript → Objective-J (Cappuccino) という web app を Cocoa で書ける opensource のがある。
あと、WebKit つかえば、Javascript から Cocoa の object をいじるのは非常に簡単。
AppleScript → AppleScript Studio... でも使ってる人ぴよまるさん以外にいるの?

MonoObjC → Mono (.Net のオープンソース版) から ObjC を呼べる。
Cocoa# → 同上、こちらのほうが Mono の公式版?でもあんまりアップデートされてないぽい。

C++ で Cocoa をかけるのってあったっけ?Objective-C++ で
C++ と Obj-C を混ぜられるのはそうだけど、Cocoa API を C++ の
クラス階層として実装したのってないよね?
そもそも delegate とか performSelector とか
C++ で実装しようがあるんでしょうか? <> 名称未設定<>sage<>2008/11/10(月) 10:38:38 ID:ku2SFWuM0<> C++とか、今のスレの流れは別に興味ないけど、
>>135が今までどんなアプリを作ったのかが
非常に気になるw <> 名称未設定<>sage<>2008/11/10(月) 11:56:44 ID:W6D0WGgG0<> 多分、hello, world.だろ。 <> 名称未設定<>sage<>2008/11/10(月) 12:10:30 ID:/kpuffDm0<> ついで、「こんにちわ、世界」と出力しようとしたが、
エンコードがあっていなかったので文字化け。
キレる。

ってのが王道です。 <> 名称未設定<>sage<>2008/11/10(月) 12:56:58 ID:r8VH7KRc0<> @ も序でに忘れてんじゃね? <> 名称未設定<>sage<>2008/11/10(月) 13:13:37 ID:+x+/8+Ia0<>  学び始めて間もなく、色々とやってみたのですが解決できず悩んでいます。
場違いかも知れませんが質問させてください。

 テキストフィールドからNSMatrixをつくり、個々のセルにint型の数値を表示しています。
マウスクリックで選択したセルから数値を取り出しています。
ところが、
個々のセルに対して、NSCellやNSTextFieldCellのメソッド、例えばsetTextColor:等を
送るとその後、セルから数値を取り出せなくなってしまいます。どうしてそうなるのかが
判りません。どなたかご教授いただけませんか?宜しくお願いします。 <> 名称未設定<>sage<>2008/11/10(月) 14:01:43 ID:jRir/5vF0<> >>184
セルを参照しているインスタンス変数を上書きしておらんか? <> 184<>sage<>2008/11/10(月) 14:25:50 ID:+x+/8+Ia0<> >>185 レス有り難うございます。
セルの指定は、以下のようにしています。

[[matrix cellWithTag:n] setTextColor:[NSColor blueColor]];

ご指摘いただいたようにポインタを使った形にしてみたのですが、
やはり上手く行きませんでした。
<> 184<>sage<>2008/11/10(月) 17:40:23 ID:+x+/8+Ia0<> 一人でばたばたして、連続の書き込みになり申し訳ないのですが、
もう少し補足させてください。

マトリクスのセル(テキストフィールド)に数値を設定しているそのメソッドにおいて、
セルの文字の色を変えようとしたとき、
「元の色 -> さらに元の色と同じ色を設定」
の場合はその後でも別のメソッドから数値が取得できる。ところが、
「元の色 -> 別の色に設定」した場合、取得できなくなる。

これはひょっとして文字の色を変更したことによって、
セルが持つテキストフィールドセルが別もの(オブジェクト)に
置き換わったということなのか?と考えています。
ご助言頂ければありがたいです。
<> 名称未設定<>sage<>2008/11/10(月) 19:16:30 ID:k7er6Elw0<> 取り出せないって具体的にはどうなるんですか?
エラーでアプリケーションが落ちるとか?
期待した値じゃなくて0しか返ってこないとか? <> 名称未設定<>sage<>2008/11/10(月) 19:35:34 ID:NIf0gNWD0<> 値をセットするところ、ゲットするところのコードを見せた方が早いよ。
言葉だけじゃさっぱり伝わらない。 <> 名称未設定<>sage<>2008/11/10(月) 20:12:33 ID:atwbsV0eO<> 昨日、ループからGUIのラベルを更新したいと言っていた者です
ループの存在するメソッドをスレッド化し、ラベル更新部分をメインスレッドで実行するようにしました

しかし、ラベルは更新されませんでした

更新部分は
[対象ラベル setStringValue:newLabel];
[対象ラベル display];
となっています
newLabelはログで確認済みです

携帯からなんで間違っているかもしれませんが、よろしくお願いします <> 184<>sage<>2008/11/10(月) 20:43:59 ID:+x+/8+Ia0<> >>188,189 レス有り難うございます。簡略化したものを見て頂くと、
//クリックしてセルの値を取り出す
- (IBAction)getNumber:(id)sender
{
NSLog(@"%d", [[myOutletMatrix selectedCell] intValue]);
}

//数字をセット
- (IBAction)setNumber:(id)sender
{
[myOutletMatrix setMode:NSHighlightModeMatrix];

[[myOutletMatrix cellWithTag:0] setIntValue:1];
[[myOutletMatrix cellWithTag:1] setIntValue:2];
[[myOutletMatrix cellWithTag:2] setIntValue:3];

int i;
for (i=0; i<=2; i++){
[[myOutletMatrix cellWithTag:i] setTextColor:[NSColor blackColor]];//悩んでいる箇所
}
}

となります。これで setTextColorの引数[NSColor blackColor]のblackColorを他の色に変えると、
クリックしても値が取得できなくなります。 <> 名称未設定<>sage<>2008/11/10(月) 22:01:15 ID:k7er6Elw0<> >>191
[NSColor blueColor]に変えても
ウチでは元気よく動いてますが・・・。

10.5.5、DevTools多分最新。 <> 名称未設定<>sage<>2008/11/10(月) 22:34:29 ID:wRpzRNtU0<> 自分はwhiteColorにしましたが動いていますね
数字は見えなくなりましたが... <> 184<>sage<>2008/11/10(月) 22:50:22 ID:+x+/8+Ia0<> >>192 レス有り難うございます。
なんと・・。実はこちらは未だOS10.4.11で、XCODE2.5なのですが、
リファレンスではNStextFildCellは10.0以降とあるのでバージョン
のことはまったく頭にありませんでした。>>191のコードのままで上記
のような結果になっています。プログラミング初心者がおこがましいですが、
これはXCODEやコンパイラのバグと考えるべきなのか、それともまだ他に
原因があるのか・・・?取りあえず今日は頭を休めます。

いずれにしてもレス頂いた方々、わざわざ実際に試してくださった192さん、
感謝いたします。有り難うございました。 <> 名称未設定<>sage<>2008/11/10(月) 22:53:24 ID:jRir/5vF0<> >>194
なんでもバグの所為にすると怒られるよ。
どこか間違ってるんだろ。 <> 184<>sage<>2008/11/10(月) 22:55:24 ID:+x+/8+Ia0<> >>193さん、わざわざ試して頂いて有り難うございました。
やはり、私の環境に問題がある可能性が明確になってきました。
感謝です。 <> 190<>sage<>2008/11/10(月) 22:56:24 ID:hIykeUF50<> 質問してる身であれですが、、、

>>184さん
カラースペースの設定とか関係ないでしょうか?
見当違いの回答かもしれないですが、RGB色空間を扱っているとき、[NSColor blackColor]が使えなかったもので、、、
自分も始めたばかりなんでそのあたりが知りたいです
<> 184<>sage<>2008/11/10(月) 23:29:28 ID:+x+/8+Ia0<> >>195さん そうですね、軽率でした。ご容赦の程。

>>197さん カラースペースというのは環境設定ーディスプレイの設定か
もしくはキャリブレーション関係でしょうか。もしそれならば、1670万色に設定されている
状態です。ガンマ補正以外はデフォルトのままにしています。しかし、そういうことがあるの
ですね。私はまだまだそこまで到達していませんが、いずれグラフィック関連のプログラミング
もできればと思っていたので、とても参考になりました。

お二方とも有り難うございました。 <> 名称未設定<><>2008/11/11(火) 00:04:08 ID:I3pahUr70<> >>194
>OS10.4.11で、XCODE2.5

同じ環境で試してもちゃんと動くぞ(ちなみに192、193とは別人) <> 名称未設定<>sage<>2008/11/11(火) 01:05:54 ID:PUKvd1/H0<> >>194
>>190

コード全体を晒したほうがいいんじゃないかな。
きっと自分では予期せぬところがおかしくなっていると思われる。

基本的に、なんかプログラムをかいて、バグがあって、
自分ではここがおかしいんじゃないかなというところを
いくら考えて修正しても正しく動かないばあいは、
その自分がここがおかしいんじゃないかなと思うところだけ
抜き出して 2ch で聞いても改善する可能性は非常に低いです。
なぜなら、そういうときはえてしてそこと違う場所がおかしいからです。 <> 名称未設定<>sage<>2008/11/11(火) 01:14:55 ID:K+WZjSUa0<> 勘だが
- (IBAction)setNumber:(id)sender
{
[myOutletMatrix setMode:NSHighlightModeMatrix];

int i;
for (i=0; i<=2; i++){
[[myOutletMatrix cellWithTag:i] setTextColor:[NSColor blackColor]];//悩んでいる箇所
}

[[myOutletMatrix cellWithTag:0] setIntValue:1];
[[myOutletMatrix cellWithTag:1] setIntValue:2];
[[myOutletMatrix cellWithTag:2] setIntValue:3];
}
こうしたらどうなる? <> 名称未設定<>sage<>2008/11/11(火) 01:29:08 ID:wEupgvlC0<> >>190
- (IBAction)start:(id)sender
{
[NSThread detachNewThreadSelector:@selector(doWork) toTarget:self withObject:nil];
}
- (void)doWork
{
for (int i = 0; i <= 100; i++) {
double percentage = i /100.;

[button setEnabled:(BOOL)percentage];
[textField setDoubleValue:percentage];
[progressIndicator setDoubleValue:percentage];

usleep(20000);
}
}

こんなテキトーなコードでも動いてます。
NSWindow上に置いた、NSButton, NSTextField, NSProgressIndicator
すべてガンガン更新されてます。@10.5.5 <> 名称未設定<>sage<>2008/11/11(火) 02:15:56 ID:+aCpyxf+0<> >>200
なるほど。。
提示されている例と明らかに異なる部分はあるのですが、
それがダメなのかはわかりませんからね。。

>>202
ありがとうございます
手元にMacがないのが辛い;いろいろ試したいのに

ちょっと流れをさらして見ます
ループを含むメソッドをもつクラスRoopTestと、ビューコントローラMyViewCtrlがあります

///myViewCtrlのメソッド
- (IBAction)push { //ループ開始
RoopTest* rt = [[RoopTest allc] init];
[NSThread detachNewThreadSelector:@selector(roopMethod) toTarget:rt withObject:nil];
}

- (void)updateLabel:(NSString*)newLabel {
[myLabel setStringValue:newLabel];
[myLabel display];
} <> 名称未設定<>sage<>2008/11/11(火) 02:18:49 ID:+aCpyxf+0<> ///RoopTestのメソッド
- (void)roopMethod {
/*
AutoPoolの宣言など
*/
while(1) {
/*
ループ内の処理
*/
if(....) { //更新する条件にはまった場合
[self performSelectorOnMainThread:@selector(updateMethod) withObject:Label waitUntilDone:YES];
}
}
}

- (void)updateMethod:(NSString*)newLabel {
MyViewCtrl* vc = [[MyViewCtrl allc] init]; //ビューコントローラのインスタンスカは無理?
[vc updateLabel:newLabel];
}

こんな感じです
ボタンプッシュ→ループクラスのインスタンス作成→ループメソッド呼び出し
→更新時、メインスレッドで更新メソッド呼び出し
→ビューコントローラのインスタンス作成→ビューコントローラ内の更新メソッド呼び出し

見づらくて申し訳ないです
なんか変な事やっているのは感じていますが、これでは動かないのでしょうか? <> 名称未設定<>sage<>2008/11/11(火) 03:13:01 ID:K+WZjSUa0<> MyViewCtrl* vc = [[MyViewCtrl allc] init]; //ビューコントローラのインスタンスカは無理?
ここが諸悪の根源だ。

あと
performSelectorOnMainThread:@selector(updateMethod)
でコロンを忘れてる。 <> 名称未設定<>sage<>2008/11/11(火) 03:38:59 ID:K+WZjSUa0<> RoopTest* rt = [[RoopTest allc] init];
ここもなんだか気持ち悪いな。 <> 名称未設定<>sage<>2008/11/11(火) 08:11:40 ID:fkU0XAOh0<> 何で画面更新の度に MyViewCtrl を alloc してるんだ?
どう考えたら、こんなコードを書けるんだろう...
あと、allc じゃなくて、alloc だろ。

明らかに自分のコードに問題があるのに、

>これはXCODEやコンパイラのバグと考えるべきなのか
とか、

>やはり、私の環境に問題がある可能性が明確になってきました。
とかよく言えるな。
コンパイラのバグとか考えるのは最後だろ。
<> 名称未設定<>sage<>2008/11/11(火) 08:12:02 ID:PUKvd1/H0<> updateMethod: で newLabel をどう渡しているつもりなのか?
あと、
MyViewCtrl* vc = [[MyViewCtrl allc] init]; //ビューコントローラのインスタンスカは無理?
無理ではないけど、そうやってつくったものは
インターフェースビルダーで既につくったオブジェクトとは別のものです。 <> 名称未設定<>sage<>2008/11/11(火) 09:13:26 ID:FpRggH2w0<> あんまし速度を求めないのであれば
スレッド使うよりNSTimerにした方が無難だと思うけど。 <> 184<>sage<>2008/11/11(火) 09:57:42 ID:zECfChq+0<> 皆さん、レスポンス頂いて有り難うございます。
>>207さん、203、204さんは私とは別の方です。軽卒な発言を書いたのは私の方です。
平にご容赦ください。

>>200さん >>191のコードのみで、やはり値が取り出せない状況になっております。
>>201さん 結果は変わりませんでした。
>>199さん、わざわざ試していただき有り難うございました。199さんが>>191のコードのみで
検証されたとしますと、私のInterface Builderでの作業が間違っているのかもしれないと考え始め
ました。

夜まで作業できませんが、なんらかの結論なり経過なりはまたご報告させて頂きます。
有り難うございました。 <> 名称未設定<>sage<>2008/11/11(火) 10:23:26 ID:fkU0XAOh0<> >>210
>>>207さん、203、204さんは私とは別の方です。
勘違いしてた。スマソ。
<> 203<>sage<>2008/11/11(火) 12:21:53 ID:a+a3ujwr0<> みなさん、いろいろ助言をありがとうございます
調べたところ、NSConnectionを用いてスレッド間通信をすればよいとあったのでやってみたところ、ついに出来ました!
やはり、ラベルの授受がうまく行ってなかったようですね
ということは、インスタンスオブジェクトのメソッドからの更新は無理ということですかな?
上にある、RoopTestにIBOutletを定義しても更新できなかったので。。

とりあえず、今後のGUI更新作業は、必ずコントローラ上で行うようにします <> 名称未設定<>sage<>2008/11/11(火) 12:44:52 ID:FpRggH2w0<> >>212
結局やりたい事は名にだったんだろう?
NSTimerだとかなり簡単なんだが。 <> 203<>sage<>2008/11/11(火) 12:52:55 ID:a+a3ujwr0<> >>213
目的の処理はとても重いのですが、NSTimerも重いとのことだったので避けていました
ループメソッドがコントローラクラスのメソッドではなく、別クラスのものだったため、例があまりなかったので悩んでいました
正直わかりやすくするためで目的の結果には必要ないものなので、時間をとってしまったのは失敗でした^^;

<> 名称未設定<>sage<>2008/11/11(火) 12:58:33 ID:K+WZjSUa0<> >ということは、インスタンスオブジェクトのメソッドからの更新は無理ということですかな?

可能。やり方を知らないだけ。
NSConnection なんて馬鹿げたことするよりよほど簡単にできる。 <> 名称未設定<>sage<>2008/11/11(火) 13:16:49 ID:PUKvd1/H0<> どうも 203 さんは日本語力が足りない気がする。
自分が書いたことを、相手が読んでわかるためには
何をどこまで書いたらいいか、考えていますか?

あなたにとっては暗黙の了解でも、読んでる人にはわからないかも知れないし、
読んでる人にはそもそもまったく納得出来ない話かもしれません。

「NSTimer も重いとのことだったので」なんてどこから出て来たのか?
NSConnection なんかつかわなくても、
performSelectorOnMainThread で withObject: で渡せばいいんでないかと
おもいますが... <> 名称未設定<>sage<>2008/11/11(火) 13:24:59 ID:wEupgvlC0<> >>203
///myViewCtrlのメソッド
- (IBAction)push { //ループ開始
RoopTest* rt = [[RoopTest allc] init];
[NSThread detachNewThreadSelector:@selector(roopMethod:) toTarget:rt withObject:self];
}


///RoopTestのメソッド
- (void)roopMethod:(MyViewCtrl*)myViewCtrl {
/*
AutoPoolの宣言など
*/
while(1) {
/*
ループ内の処理
*/
if(....) { //更新する条件にはまった場合
[myViewCtrl performSelectorOnMainThread:@selector(updateLabel:) withObject:Label waitUntilDone:YES];
}
}
}

どうでも良いんだけど、roopはloop。 <> 203<>sage<>2008/11/11(火) 13:49:08 ID:a+a3ujwr0<> >>216
>>209
>あんまし速度を求めないのであれば
>スレッド使うよりNSTimerにした方が無難だと思うけど。
から勝手に重いものと解釈していました、申し訳ないです

performSelectorOnMainThreadは初め使っていました
が、できなかったのですが。。
>>217をみてわかりました
いろいろと勘違いをしていたようです

みなさんありがとうございます

最後に、差し支えなければNSConnectionが劣っている?理由が知りたいです <> 名称未設定<>sage<>2008/11/11(火) 13:54:33 ID:4BivI9sj0<> 自分だったらthread側はstringに対するアクセッサ用意するだけで何もしない。
Thread側から他へ要求すると遅くなるし、結合度が強くなって簡単に修正できなくなる。
メイン側はtimerかevent loopのついでに進捗見て非同期にゆっくり表示すれば良い。
人間が視認できる速度は知れてるからそれで十分 <> 名称未設定<>sage<>2008/11/11(火) 14:21:48 ID:LVzKoGmm0<> > NSConnectionが劣っている?
というよりは、この場合は不必要である処理が間に挟まっちゃいます。
適材適所でご利用ください。 <> 名称未設定<><>2008/11/11(火) 20:37:16 ID:nt03fgQI0<> 超初心者です。
windowの立ち上がり時にcomboBoxに項目を自動的に加えたいのですが・・・

たぶんtableViewの時と同じようにdatasoceとして登録しておくのか、
window起動時の動作を定義できる関数とかがあるのだろうと思って調べたのですが
見つかりませんでした。 <> 名称未設定<><>2008/11/11(火) 20:45:45 ID:nt03fgQI0<> 一応IBのwindowのデリゲートをコントローラに接続して
windowWillMoveをオーバーライドすることによって
windowを動かしたときの定義はできたのですが・・・・・

windowを開いたときの動作を定義する関数もあるのでしょうか? <> 名称未設定<><>2008/11/11(火) 20:58:42 ID:nt03fgQI0<> データソースで登録できますね。
お騒がせして申し訳ございません。 <> 名称未設定<><>2008/11/11(火) 22:21:22 ID:nt03fgQI0<> データソースで登録する仕方がわかんねー <> 名称未設定<>sage<>2008/11/11(火) 22:52:41 ID:mgiOCDFu0<> http://www.oomori.com/cocoafw/ApplicationKit/NSComboBox/index.html

datasource使わなくてもできるっぽいけど。 <> 名称未設定<><>2008/11/11(火) 23:07:33 ID:nt03fgQI0<> >>225
確かに出来るんですが、起動時にすでにcomboBoxの中に項目が追加されているように
したいんですよね。
で、最初はwindowDidBecomeKeyのオーバーライドでクリアさせたんですけど、
でもデータソースがあるって知って、今それをトライしているところです。 <> 名称未設定<>sage<>2008/11/11(火) 23:18:55 ID:u7V+zvQV0<> >>226
awakeFromNibで追加するのはダメなん? <> 名称未設定<>sage<>2008/11/12(水) 00:23:06 ID:7kG+RNj90<> >>224
これじゃ駄目?
-(void)awakeFromNib{
int i;
_array = [[NSMutableArray alloc] initWithCapacity:0];
for(i=0;i<10;i++){
[_array addObject:[NSString stringWithFormat:@"String%d",i]];
}
[myComboBox setUsesDataSource:YES];
[myComboBox setDataSource:self];
}

windowBecomeKeyをどうしても使いたいなら、
-(void)windowDidBecomeKey:(NSNotification *)aNotofication{
if([myComboBox dataSource] != self){
上と同じなので略。
}
}

で、↓これ。

-(int)numberOfItemsInComboBox:(NSComboBox *)aComboBox{
return [_array count];
}
-(id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(int)index{
return [_array objectAtIndex:index];
}
酔っ払ってカキコしてるから間違ってたらすまん <> 名称未設定<>sage<>2008/11/12(水) 12:21:14 ID:/WVpT08D0<> NSTextFieldのSubClassを作って並んでいる状態でtabキーを押してもNextKeyViewに移動しないんですがなにか特殊な処理は必要ですか?

SubClassでは
- (id)initWithFrame:(NSRect)r
{
self = [super initWithFrame:r];
if(self){
[self setDelegate:self];
before = [[NSString string] retain];
}
return self;
}

- (BOOL)becomeFirstResponder
{
[before release];
before = [[self stringValue] retain];
return [super becomeFirstResponder];
}
- (void)textDidEndEditing:(NSNotification*)aNotification
{
if(![before isEqual:[self stringValue]]){
[[NSNotificationCenter defaultCenter] postNotificationName:@"TSTextDidChange" object:nil];
}
}
しか処理をしておらず、編集終了時に内容に変更があれば、別のControllerで
[window setDocumentEdited:YES];
を処理する、と言った感じです。
Controllerで通知を受け取らないのは、bindingを設定してあり通知がControllerに来なかったためです。

Xcode、OSともに最新のものを使用しています。
どなたかお知恵をお貸しください。 <> 名称未設定<>sage<>2008/11/12(水) 12:36:08 ID:rhZoTYoC0<> >>229
- (BOOL)resignFirstResponder {
return NO;
}

は書いてある? <> 名称未設定<>sage<>2008/11/12(水) 12:39:39 ID:rhZoTYoC0<> >>230
逆だったorz

- (BOOL)resignFirstResponder {
return YES;
} <> 名称未設定<>sage<>2008/11/12(水) 12:58:01 ID:DjwU0p+F0<> >>229
何でこんな無茶苦茶なコードを書く必要があるのか聞きたいw
サブクラス作る必要もないし、自分自身をdelegateにする必要もないし、Notificationをわざわざ転送する必要もない。 <> 名称未設定<>sage<>2008/11/12(水) 13:02:27 ID:/WVpT08D0<> >>230
ありがとうございます。
それは書いていませんが、オーバーライドしていないメソッドは
SuperClass(この場合NSTextFieldやNSControl)のものが勝手に使われる
という認識ですが間違っているのでしょうか。

ところで今回の件に関しましては自己解決しました。。。
- (void)textDidEndEditing:(NSNotification*)aNotification
{
if(![before isEqual:[self stringValue]]){
[[NSNotificationCenter defaultCenter] postNotificationName:@"TSTextDidChange" object:nil];
}

[super textDidEndEditing:aNotification]; ←これがポイント。
}

と、最後にSuperClassのメソッドを呼び出してやることで無事にNextKeyViewが選択されました。

この問題に取り組んでくれた皆様、ありがとうございました。 <> 名称未設定<>sage<>2008/11/12(水) 13:08:58 ID:/WVpT08D0<> >>232
私も正直こんな面倒なことはしたくなかったのですが。。。
Bindingを使いこなせていないせいかイマイチ「編集終了時に値が実際に変更されているかどうか」
を比較する手段が思い浮かばずこんなことになった次第です。 <> 名称未設定<>sage<>2008/11/12(水) 13:47:41 ID:rhZoTYoC0<> >>234
>編集終了時に値が実際に変更されているかどうか
それだけなら普通にデリゲート使えばいいんじゃね? <> 名称未設定<>sage<>2008/11/12(水) 14:00:48 ID:bpwWLlCO0<> >>234
Core Dataを使ったり自分でUndoを実装すればsetDocumentEdited:YESは自動でなされるだろうし、
そこまでしない小規模なものならdelegateのcontrolTextDidChange:でいいし、
Bindingされているモデルが変更されたときやりたいならモデルに対してKVOすればいいと思う。 <> 名称未設定<>sage<>2008/11/12(水) 14:26:27 ID:L0OFkZM60<> どうぞ

キー値監視について(Key Value Observing)
http://developer.apple.com/jp/documentation/Cocoa/Conceptual/KeyValueObserving/
<> 名称未設定<>sage<>2008/11/12(水) 15:04:38 ID:/WVpT08D0<> >>235
Bindingが設定してあるNSTextFieldからはDelegateしても通知がポストされなかったんです。

>>236
>>237
CoreDataは一度かじって挫折してました。今度調べてみようと思います。
とりあえずはKVOの方向から解決策を模索してみます。

<> 名称未設定<>sage<>2008/11/12(水) 15:28:59 ID:RkfhbVlK0<> >>238
Bindingしてても普通にデリゲートメソッド呼ばれるよ?
念のため書いておくとtextDidEndEditing:はデリゲートメソッドじゃないからね。
controlTextDidEndEditing:かcontrolTextDidChange:を使えばいいと思う…が、
もちろんcontrolTextDidEndEditing:は変更の有無は関係ないし呼ばれたときにはBindingで変更された後だから、
その用途には向いていないのかもしれない。 <> 名称未設定<>sage<>2008/11/12(水) 15:59:05 ID:/WVpT08D0<> >>239
textDidEndEditing:はDelegateではないんですか。
大きな勘違いでした。どうりで。。。

そしてDelegateが呼ばれるということは
そのときの私の何か他の部分がよくなくて正しくない動作をしていたか
もしくはtextDidEndEditing:がController側で実装してあり呼び出されなかった、
という話だったのではないかという気もしてきますね。

じっくり調べてみます。


皆さんありがとうございました。 <> 名称未設定<>sage<>2008/11/12(水) 20:29:57 ID:3TV0qhbR0<> ttp://www.friday.com/bbum/2008/11/11/autozone-the-objective-c-garbage-collector/
darwinsourceに最近、追加された(?)AutoZoneって何かと思ったら、objcのgcなんだ? <> 名称未設定<><>2008/11/12(水) 21:22:46 ID:xTjUSaTU0<> >>228
非常に参考になりました。
ありがとうございます。
あー僕も酔っ払いながらかけるようになりたいっす。 <> 名称未設定<>sage<>2008/11/13(木) 05:09:02 ID:Zr8Iqv0x0<> 暫くcocoaから離れてたんですが、
ファイルをゴミ箱に入れる方法ってNSworkspace以外に実装されてませんかね?ゴミ入れ音付で <> 名称未設定<>sage<>2008/11/13(木) 08:32:00 ID:z+Jww09y0<> NSAppleScriptでFinderにやらせれば音が出るよ。 <> 名称未設定<>sage<>2008/11/13(木) 09:22:35 ID:XbONM5Ht0<> Finder でゴミ箱にすてるのと同じ動作をする API が
Leopard で Carbon に追加されてます。
http://developer.apple.com/releasenotes/Carbon/RN-CarbonCore/
の File Manager のところを参照。 <> 名称未設定<><>2008/11/13(木) 20:54:10 ID:Jm2bYpNn0<> 初心者です
ボタンを押したら新たにwindowを表示したいんですが
そういった関数をご存知の方いませんか?
<> 名称未設定<>sage<>2008/11/13(木) 21:02:24 ID:qC4pYBiI0<> >>246
まずオブジェクト指向の意味を理解してください。
そうすれば自ずと何をすれば良いか分かります。 <> 名称未設定<>sage<>2008/11/13(木) 21:15:19 ID:hEQXH/4q0<> 複数のウインドウを表示したり制御するのって意外と難しくて面倒なんだよね。
メニューのアクションとかもキーウインドウに対してセンドしなきゃいけないし。 <> 名称未設定<><>2008/11/13(木) 21:21:03 ID:Jm2bYpNn0<> >>247
そこまで戻る必要があるんですか・・・・・
ただ単にAPIの問題だと思っていたのですが・・・・
深いですね。 <> 名称未設定<>sage<>2008/11/13(木) 21:33:42 ID:Eaz1tdC20<> 単にダイアログを表示するだけならAPIの問題だけどな。 <> 名称未設定<>sage<>2008/11/13(木) 21:39:35 ID:uPguWfkE0<> >>246
Interface builderだけで簡単に作れるよ <> 名称未設定<><>2008/11/13(木) 21:53:20 ID:Jm2bYpNn0<> >>251
customViewを使うことにしました。
教えていただいてありがとうございます <> 名称未設定<>sage<>2008/11/13(木) 21:55:02 ID:Eaz1tdC20<> 何をやりたかったんだ…… <> 名称未設定<>sage<>2008/11/13(木) 22:07:32 ID:NIwWlo0Q0<> >>252
えええ、アクションつなぐのじゃdameなの? <> 名称未設定<>sage<>2008/11/13(木) 22:35:51 ID:qC4pYBiI0<> www <> 名称未設定<><>2008/11/13(木) 22:55:55 ID:Jm2bYpNn0<> >>253-254
何とかボタン一つでwindowを表示させることに成功しました
お騒がせしてすみません。 <> 名称未設定<>sage<>2008/11/13(木) 23:03:14 ID:2FfKOU+J0<> Finderウインドウの表示内容を更新する方法って
NSFileManagerでフォルダを作る意外には無いのかな <> 名称未設定<>sage<>2008/11/13(木) 23:07:22 ID:cv3LdfgN0<> >>257
NSWorkspaceのnoteFileSystemChangedではだめ? <> 名称未設定<>sage<>2008/11/13(木) 23:21:55 ID:2FfKOU+J0<> >>258
noteFileSystemChangedでは更新されるときとされないときがあるんだよね。
特に、smbでマウントしたwindows共有フォルダには効かなくて、無理矢理不可視フォルダを作って削除する方法で対処してる。
<> 名称未設定<>sage<>2008/11/14(金) 03:52:32 ID:Z7zd+aLz0<> >>246
まず手始めにwindow画面を起動時に見えなくして
NSWindowクラスのmakeナンタラ関数で前面に出してきたらいいんじゃないのか?
後IBでコネクトね。

オブジェクト指向を理解してても出来ませんよ。
APIの問題です。 <> 名称未設定<>sage<>2008/11/14(金) 20:14:55 ID:9weqjvTi0<> 今はCarbonのGestaltを使っているんだけど、CocoaでOSのバージョンを
取得する方法はありますか? <> 名称未設定<>sage<>2008/11/14(金) 22:32:15 ID:9w5lRAlf0<> >>261
[[NSProcessInfo processInfo] operatingSystemName] <> 名称未設定<>sage<>2008/11/14(金) 22:45:01 ID:xk6PzQrT0<> いつも気になるんだが
NSWorkspaceとNSProcessinfoのメソッドの分け方がおかしい
と思うのは俺だけだろうか。

直感的じゃないんだよな <> 262<>sage<>2008/11/15(土) 00:33:02 ID:/jR4jH2p0<> すまん、間違えた
[[NSProcessInfo processInfo] operatingSystemVersionString] <> 名称未設定<>sage<>2008/11/15(土) 01:13:29 ID:Fo6g+zIo0<> どうせ NSProcessInfo も最終的に Gestalt を呼んでるんだろうから
Gestalt でいいんでは? <> 名称未設定<>sage<>2008/11/15(土) 11:36:16 ID:4imPoNXz0<> ローカリゼーションとかで使う .strings ファイルの形式って、どっかに詳細なスペックは
あるかな?

自分でも同じフォーマットを利用しようと思って(ローカライズ目的ではないけど)、
foo = var; 式のエントリの文字列を -[NSString propertyListFromStringsFileFormat]
でパースさせているんだけど、エラーになる条件がよくわからない。
 class = hogehoge;
みたいに、1単語の時はクォートしなくていいように一見見えるんだけど、少し違うタイプ
 name[0] = hogehoge;
だとエラーになる。 <> 名称未設定<>sage<>2008/11/15(土) 11:56:07 ID:7DuJOrGV0<> http://developer.apple.com/documentation/MacOSX/Conceptual/BPInternational/Articles/StringsFiles.html <> 261<>sage<>2008/11/15(土) 13:03:33 ID:8pxLxWly0<> >>262,264
ありがとう。NSProcessInfoとは・・・なかなか見つからないわけだ。
>>265
今はGestaltで間に合うけど、Carbonもいつまでサポートされるか
わからないからね。 <> 266<>sage<>2008/11/15(土) 14:34:07 ID:9X9dz6u50<> >>267
あ、どうもありがとうございます。

でもよく考えたら自分の最終目的は なんたら = かんから; のようなエントリが複数ある
ファイルから、この なんたら/かんたら のペアを取り出すことでしたw
で、.strings用のAPIが使えないかと思った、という流れです。でも厳しそうですね。

ここで なんたら や かんたら は、
name[0]のような式の場合もあれば、文字列の場合もある。複数の語からなる文字列の
場合はダブルクォートで囲まれる。文字列自身にダブルクォートが含まれる場合は
バックスラッシュでエスケープする。みたいな感じです。

ちゃんとやろうとするとパーサーみたいのを書かないといけないと思うんですが、
もし出来合いのものがあるならそれを利用しようかと.... プログラムの設定ファイルとかで
ありがちな処理だと思うので、何かいいものがあれば....
CocoaなのでObjCから利用できるものが望ましいです。よろしくお願いします。 <> 名称未設定<>sage<>2008/11/15(土) 14:38:35 ID:7DuJOrGV0<> >>269
そゆばあいはNSUserDefaults使います。

どうしても .stringsでなきゃならないなら、
-[NSBundle localizedStringForKey:value:table:]
で無理やり。 <> 名称未設定<>sage<>2008/11/15(土) 14:51:20 ID:Fo6g+zIo0<> >>269
.strings ファイルは "..." = "..." しか公式にはサポートされてないんではとおもいます。

それは OS X 以外のソフトとデータをやりとりする必要がある?
OS X だけですむなら、単に内部では NSDictionary でもっておいて、
保存するときには plist 形式で書き出すだけで済むと思います。
OS X 以外とデータをやりとりする必要がある場合でも、
2008年暮れにもなってパーサを自前で書くのは馬鹿らしいとおもいます。
単に XML で書き出して、(plistもXMLなのでそれでいいですが、)
ほかのプラットホームで読むときはXMLライブラリつかって
読み込むのが簡便だとおもいます。
<> 名称未設定<>sage<>2008/11/15(土) 14:54:03 ID:7DuJOrGV0<> ごめん。全然読まずにレスしてた。

たぶん、そういう特殊用途なら自力でパースした方が早いです。
NSScannerならObjCで使うことが可能です。:-) <> 266<>sage<>2008/11/15(土) 14:58:56 ID:9X9dz6u50<> >>270
>そゆばあいはNSUserDefaults使います。

えーと、状況は なんたら = かんたら; みたいのが沢山入ったファイルがまずありきで、
この なんたら/かんたら のようなペアをロードしたいのです。

ただ、ここで なんたら と かんたら はダブルクォートで囲まれた文字列とは限らず、
そういう場合に.strings用のAPIだと失敗するようなのでどうしましょう、という流れです。

わかりにくくてすみません。もしかしてCocoaと関係ないかもしれないですね。 <> 名称未設定<>sage<>2008/11/15(土) 15:05:03 ID:7HtqMIxl0<> プロパティリストでいいじゃん。
NSDictionaryをそのまま保存すればいいよ。 <> 266<>sage<>2008/11/15(土) 15:29:05 ID:9X9dz6u50<> >>271
OS Xではあるんですが、自分の直接の管理下にない別のソフトが なんたら = かんたら;
みたいなフォーマットでデータを吐き出してくるのです。で、それを処理します。
長期的にはそのソフトが最初からplist(XML)を吐き出すべきなんでしょうが、差し当たってw

>>272
一応、そこそこ汎用な解析をしないといけなそうな感じなんですが、
NSScanner がおすすめですか。使ったことがないので調べてみます。 <> 名称未設定<><>2008/11/15(土) 19:31:31 ID:74MSLTm4P<> 汎用性を持たせるならJASONって手もあるよ <> 名称未設定<><>2008/11/15(土) 19:34:08 ID:74MSLTm4P<> 間違えた、JSONか <> 名称未設定<>sage<>2008/11/16(日) 02:31:44 ID:5nyRUfyn0<> >>275
>自分の直接の管理下にない別のソフトが なんたら = かんたら;
>みたいなフォーマットでデータを吐き出してくるのです。
なるほどそれはしかたないですね。

NeXT 形式 plist で読み込ませればなんとかなるかもしれないです :
http://developer.apple.com/documentation/Cocoa/Conceptual/PropertyLists/Articles/OldStylePListsConcept.html
あなたのファイルを読み込んで、さらに { ... } で囲んだら、
NSPropertyListSerialization をつかって NSDictionary に出来ると思いますが、
Unicode が通るかどうかわかりません。

僕なら perl か ruby かなにかでそのフォーマットのデータを
plist に書き換える短いスクリプトを書いて、
Cocoa からそのスクリプトを呼びますが。 <> 266<>sage<>2008/11/16(日) 04:41:34 ID:NL8p9MOk0<> >>277
>JSON
おーなんか面白そうですが今回はとりあえず。

>>278
>NeXT 形式 plist で読み込ませればなんとかなるかもしれないです :
結局CFPropertyListほげに処理が行くようで、エラーになる感じは>>266と同様のようです。

>僕なら perl か ruby かなにかで
確かに、正規表現で切り出したりすればいいですかね。
左辺or右辺が文字列リテラルのときとそうでないときがあるのがちょっと面倒ですが... <> 名称未設定<>sage<>2008/11/16(日) 05:06:34 ID:IF7lggCK0<> NSScannerでパースするのが一番楽だと思うな。
たいして複雑な書式じゃないようだし。 <> 266<>sage<>2008/11/16(日) 06:29:16 ID:NL8p9MOk0<> >>280
まだNSScannerを理解しきれてないですが、割と単純に文字をスキャンするだけじゃない
ですかねえ?
書式には文字リテラルが含まれるので、そんなに単純じゃなかったりします。例えばリテラル内に
¥"が現れる可能性もあったり... 結局、それなりの状態遷移を書く必要があるような。

とりあえずperlで正規表現を考えてみました... 文字リテラル用の表現が、なんとかできたかなあ
という感じです。文字リテラルじゃないときの場合分けはむしろ簡単かな。 <> 名称未設定<>sage<>2008/11/16(日) 11:57:37 ID:IF7lggCK0<> >>281
NSScannerはその名の通りスキャンするだけだから、この場合は「"なんたら" = かんたら\";」から「"なんたら"」と「かんたら\"」を
取り出すだけしか出来ないね。エスケープされてるのがダブルクォーテーションだけならその後置き換えればいいだけだけど。
正規表現使うならPerlじゃなくてもCocoaから使えるライブラリもあるよ。
http://www8.ocn.ne.jp/~sonoisa/OgreKit/ <> 266<>sage<>2008/11/16(日) 21:53:32 ID:NL8p9MOk0<> >>282
>この場合は「"なんたら" = かんたら¥";」から「"なんたら"」と「かんたら¥"」を
>取り出すだけしか出来ないね。

こういう風に、値のデリミタが異なる場合を毎回試さないといけないので、なんかすでに面倒感
が出てくるというか...

>エスケープされてるのがダブルクォーテーションだけならその後置き換えればいいだけだけど。

勿論¥自体もエスケープされていることがあります。ので、上の場合のでも¥のさらに手前が¥かどうか
調べないといけなくて、下手するとさらにその前、みたいなバックトラックモードに...
で、そういうのを普通のプログラムで書いていると、
「これって正規表現を展開したのを書いてるんじゃないか?」、という気分になってくるという....

>Cocoaから使えるライブラリもあるよ。

ちらっと眺めてみました。よさげですね。
なんか正規表現のセットが複数種類あるみたいですが... ONIG_SYNTAX_PERL というのを
有効にしたい場合はどうしたらいいんですかね? (ソースを調べろって?) <> 名称未設定<>sage<>2008/11/17(月) 07:34:57 ID:WMJOqaGa0<> ステートマシンを書くといいよ <> 名称未設定<>前スレ947<>2008/11/17(月) 21:43:05 ID:VleoNMSp0<> 前スレでCGImageRefの輪郭抽出でお世話になったもんです。
御礼が遅くなりましたが、とりあえず無事解決?したのでご報告まで。

結局、シェーダー書いてCoreImageで処理に落ち着きました。クリック判定の時だけ
CGColorAtX: Y:で判定というかなりテキトウな処理です。

いまのところ問題なく動くようです。アドバイスしてくれた方、ありがとうございました。
しかし、CoreImage面白いですね。 <> 前スレ947<><>2008/11/17(月) 21:43:56 ID:VleoNMSp0<> 間違えた… 285です。メール欄に名前入れちまったい… <> 名称未設定<>sage<>2008/11/17(月) 22:50:50 ID:AI8JnSZ50<> NSOpenPanelでオープンダイアログ出すと
スレッドの数が異常に増殖するんだけど
これって普通ですか?

5-6スレッドも何に使ってんだろ・・・。 <> 266<>sage<>2008/11/17(月) 23:25:37 ID:VM9cdE+20<> >>284
正規表現はそれと同等な有限オートマトンで表現できる... いえ、もうそこはいいですw
巷に優秀な正規表現コンパイラが溢れる今日日、固定パターンの受理マシンを最初から作るのは...
今回。文字リテラルを含む入力の正規表現を確定するのに少し試行錯誤しましたが、
同じことを毎回プログラムの変更でやるのと、どっちが楽かと..

しかし、Cocoaでネイティブに正規表現をサポートしてくれたりしないのかな。おしまい。 <> 名称未設定<>sage<>2008/11/18(火) 00:48:50 ID:d2ANkhTZ0<> >>287
modalってだけて、ランループを3つぐらい塞いでる気がするし、
あとディレクトリに変化あったら自動で更新されるのもスレッド立ててる気がするし
まぁ5-6スレッドぐらいすぐ使うんじゃない? <> 名称未設定<>sage<>2008/11/18(火) 20:18:09 ID:wWLAMWH+0<> >>288
時代遅れな技ですが。

#define Pattern NSClassFromString(@"java.util.regex.Pattern")

NSJavaSetupVirtualMachine();
id matcher = [[Pattern compile:@"ab(.+)cd"] matcher:@"ab123cd"];
BOOL result = [matcher find];
if(result) NSLog(@"%@", [matcher group:1]);

<> 名称未設定<>sage<>2008/11/19(水) 01:24:15 ID:awxWx5gM0<> >>290
なるほどー。試してみると、最初の一回は時間がかかるけど2回目以降は悪くないですね。

Java -> Cocoa は確か新規のCocoa APIが今後サポートされないとかいう話がありましたが、
Cocoa -> Java の方も同じことになるんですかね?
Cocoa というより ObjC と書くべきなのかもしれないけど。 <> 名称未設定<><>2008/11/19(水) 15:26:17 ID:BWlnzWKG0<> Dictionaryに格納すると
順番がめちゃくちゃになるんですけど・・・・・
なにかいい方法ないですか? <> 名称未設定<><>2008/11/19(水) 15:36:59 ID:7EA3pAHdP<> NSArrayにも格納したら?
NSDictionaryやNSArrayはオブジェクトのコピーじゃなくてそのポインタを格納するだけだから,
両方使ってもメモリが一気に増えるってことはないと思う. <> 名称未設定<>sage<>2008/11/19(水) 16:11:23 ID:LDJCxdq70<> ソートも使えるしな <> 名称未設定<><>2008/11/19(水) 16:13:18 ID:BWlnzWKG0<> >>293-294
そうします。
ありがとうございます。 <> 名称未設定<>sage<>2008/11/19(水) 21:02:02 ID:gPj/kG9F0<> >>291
java -> ObjCもObjC -> javaもサポート停止です。というか保守停止かな?バグが発見されても放置みたいな。
下位互換のために、それ自体は、OSの中に残るようですけども。 <> 名称未設定<>sage<>2008/11/19(水) 23:16:35 ID:TXTxCrRP0<> >>292
めちゃくちゃってか、アルファベット順とかそんなんだろ? <> 名称未設定<>sage<>2008/11/19(水) 23:44:27 ID:tDuS/dfz0<> っていうかディクショナリに順番を期待するのが間違いだよね。 <> 名称未設定<>sage<>2008/11/19(水) 23:50:44 ID:NbUmXR8v0<> >>298
普通本屋で売ってる辞書って順番にデータが格納されてるよね...
いや、僕らは NSDictionary はハッシュテーブルだって知ってるから
順番を期待しないけど、プログラムはじめたばかりのひとが
混乱してもしかたないんじゃないかな。

それで気になるのは、~/Library って素人は中をいじっちゃだめだけど、
日常用語としては図書館には行ってもいいはずだから、
すくなくとも英語圏の素人さんなら中に pdf を大量にためちゃったりとか
ある気がするんだが問題ないんだろうか。 <> 名称未設定<>sage<>2008/11/19(水) 23:54:18 ID:ie6rHw0y0<> ディクショナリに順番を期待するってREALbasicからの移行組?
コイツはハッシュ型でありながら追加した順番も保持されてるんだよな。 <> 名称未設定<>sage<>2008/11/20(木) 00:36:58 ID:3uwYS9mh0<> >>299
>Library
中をあけたらすでにごちゃごちゃとフォルダが入っているのは
わかるはずだから、自分で自由に使っていいフォルダとは違う
ということぐらいはわかるんじゃないのか。
もっともアメリカに限っていえば、ぬれた猫を電子レンジに
かける人がいるお国柄だからどうだかわからんが… <> 名称未設定<>sage<>2008/11/20(木) 00:41:31 ID:/EKcz7fk0<> そもそもアメリカ人は馬鹿だから Library と聞くと怯えて近寄らないとか? <> 名称未設定<>sage<>2008/11/20(木) 11:32:25 ID:bdDdnpxd0<> 図書館に自分の本を勝手に置いて来たり
中身を書き換えたりするようなことは普通しないと思う <> 名称未設定<><>2008/11/20(木) 22:48:47 ID:USnih3EQ0<> >>302
でもおれたちはその馬鹿なアメリカ人が作ったソフトでひいひい言ってるんだぜ? <> 名称未設定<><>2008/11/21(金) 00:37:17 ID:Mt+yfcCZ0<> cocoaって標準で正規表現使えないの?
どんだけ屑なの? <> 名称未設定<>sage<>2008/11/21(金) 00:40:11 ID:ulllyDug0<> OgreKit <> 名称未設定<>sage<>2008/11/21(金) 02:58:00 ID:KDDxp3BY0<> 雪ヒョウではOgreKitを標準で搭載すべきだ <> 名称未設定<>sage<>2008/11/21(金) 02:59:39 ID:603c8RI50<> 毎回フレームワークを追加して<OgreKit/OgreKit.h>を書くのがめんどくさい <> 名称未設定<>sage<>2008/11/21(金) 04:02:45 ID:Iagf3QtT0<> OgreKit 自体はすごいんだろうけど、Cocoa に取り込むとした場合、既存の Unicode 処理との
整合性が気になるけど大丈夫なんだろうか。Unicode の正規化の規則とか、case insensitive で
マッチした場合の振る舞いとか... そこら辺、何か気づいた人はいますか?

一方、Cocoa は内部で ICU をいろいろ参照しているみたいなんで、もし正規表現を実装することに
なるならやはり ICU を経由するのかなあと思うが... <> 名称未設定<><>2008/11/21(金) 04:09:28 ID:M0Acd2jx0<> >>309
おお、我が母校はCocoa内部からも参照されていたか。 <> 名称未設定<>sage<>2008/11/21(金) 04:17:30 ID:ulllyDug0<> >>310
笑ったww
自分は卒業生でも関係者でもないが、そのネタ分かる人どれだけいるんだ? <> 名称未設定<>sage<>2008/11/21(金) 04:41:23 ID:Iagf3QtT0<> あそこ広々して、雰囲気もいいよね。やはりCならではとでも言いましょうか...
ほとんど関係者じゃないんだけど、知り合いの先生が教員用住宅に住んでてそこが結構広くて、
飲み会(一応アカデミックな)とかよく開いてもらったなあ。
そういえばかつて天文台にも用があったので、何かの拍子にNAOって綴りをみると思い出すw

しかしICUは一般的にはいろんな管を繋がれてピッ、ピッ、とか鳴ってるイメージかとw <> 名称未設定<>sage<>2008/11/21(金) 09:31:03 ID:cugDLjhM0<> あれ?聞いた話では構内での飲み会は禁止だったが…今度あったら確認してみよう。
って、Cocoaはどうした? <> 名称未設定<>sage<>2008/11/21(金) 09:34:44 ID:pKv4qdEc0<> Cocoaどこ?わたしは誰? <> 名称未設定<>sage<>2008/11/21(金) 10:17:50 ID:AatvtfKP0<> 俺はUnicodeのみの制約を嫌ってオリジナルの鬼車の方を使ってる。 <> 名称未設定<>sage<>2008/11/21(金) 13:25:04 ID:6z3WSjYr0<> >>305はどんな言語を使ってるの? <> 名称未設定<><>2008/11/21(金) 13:43:56 ID:M0Acd2jx0<> パァるじゃね?パァる。 <> 名称未設定<>sage<>2008/11/21(金) 14:23:01 ID:jqALT49u0<> ぱぁる厨の城東区だからね <> 名称未設定<>sage<>2008/11/21(金) 14:35:54 ID:KDDxp3BY0<> Rubyでも正規表現は使えたはず。
REALbasicも3.5あたりから内蔵されてバリバリ使えるしね。
だが俺はCocoaが屑とは思わん。むしろマンセーしてる。
AppleがPascalかBASICでCocoaアプリ作れるようにしてくれれば
もっとマンセーするんだけどねぇ <> 名称未設定<>sage<>2008/11/21(金) 18:13:59 ID:JwOtb6rU0<> >>319
つ 旧OS <> 名称未設定<>sage<>2008/11/21(金) 18:25:23 ID:FH+sWgoq0<> Cocoa-Perlが出たらパァる厨も大喜び <> 名称未設定<>sage<>2008/11/21(金) 18:45:13 ID:tTr4sDtj0<> regex(3)じゃだめなの?俺仕事のコードでバンバン使っちゃってるけど。 <> 名称未設定<>sage<>2008/11/21(金) 20:00:45 ID:7NEuk8Da0<> regex(3)の機能で充分ならばそれでいいんでないの <> 名称未設定<>sage<>2008/11/22(土) 00:01:23 ID:Fh4kVmb/0<> >>321
CamelBones が既にあるよ。

>>319
Pascal、BASIC と Obj-C のどこに違いがあるのかわからん。
見た目はちがうが、ほとんど文法一対一に対応するのに。 <> 名称未設定<>sage<>2008/11/22(土) 10:33:51 ID:Ua3yloZ/0<> >>324
CamelBones、中の人がやる気がなさすぎでしょう。
10.5になるまでは「標準でのるかも?」って勢いだったけど、その後失速し
て、いまじゃそのままでは動かない。他の人があてたパッチでかろうじて、、、

<> 名称未設定<>sage<>2008/11/22(土) 13:24:04 ID:N1bFgiBw0<> Propertyって便利だけど、何か中途半端な気がするのは気のせいですかね?
オプジェクトを作成してプロパティをセットする所までは便利だと思うけど
id型で飛んできた時に、いちいちキャストするなんてイヤダイヤダなので、
受けるときはプロパティなんて使ってないし、あーソースが汚くなる.... <> 名称未設定<><>2008/11/22(土) 13:41:41 ID:E1jjc5CT0<> ? <> 名称未設定<>sage<>2008/11/22(土) 13:41:52 ID:Fh4kVmb/0<> >>326
>id型で飛んできた時に、いちいちキャストするなんてイヤダイヤダなので、
>受けるときはプロパティなんて使ってないし、あーソースが汚くなる....
意味が判らんのですが、どういうこと?
なんでプロパティつかっててキャストするはめになるのか判らんのですが。 <> 名称未設定<>sage<>2008/11/22(土) 13:44:26 ID:Q5Vk1lrT0<> 画像のExifや一般情報を取得する方法って有るんでしょうか? <> 名称未設定<>sage<>2008/11/22(土) 13:50:30 ID:Fh4kVmb/0<> Core Graphics の CGImage をつかえばいいです。
CGImageSourceCopyProperties のあたりを参照。 <> 名称未設定<>sage<>2008/11/22(土) 13:59:13 ID:E1jjc5CT0<> >>326
property設定する時、全部idで宣言してるとかじゃないよね。 <> 名称未設定<>sage<>2008/11/22(土) 14:17:29 ID:RI5N1Fnn0<> ひとつ賢くなった>>326であった <> 名称未設定<>sage<>2008/11/22(土) 16:47:35 ID:N1bFgiBw0<> senderで送られてくるオブジェクトって通常id型でしょう?
そのプロパティにアクセスしようと思たらキャストかクラスに代入する必要があるでしょうに

<> 名称未設定<>sage<>2008/11/22(土) 17:07:45 ID:F4n+OlHB0<> プロパティ関係ないじゃん。
普通のメソッドでもそうじゃん。 <> 名称未設定<>sage<>2008/11/22(土) 17:24:03 ID:lKz+QYh00<> >>333
プロパティどうやって書いてんの? <> 名称未設定<>sage<>2008/11/22(土) 17:35:49 ID:IISK+7aO0<> - (IBAction)hoge:(id)sender
{
sender.foo = [aClass new]; // ???
}
ってことね。


俺はsenderに働きかけたことないけど。 <> 名称未設定<>sage<>2008/11/22(土) 18:11:15 ID:R6yOr3bR0<> >>333
senderなんてほとんどIBOutletだろ。

if (sender == hoge) {
float value = hoge.foo;
}

みたいに書くんじゃね? 普通は。 <> 名称未設定<>sage<>2008/11/22(土) 19:12:12 ID:Il+FqCN50<> うそーん <> 名称未設定<>sage<>2008/11/22(土) 19:40:36 ID:EmZE7Gqk0<> NSTextViewでsetEditable:NOにしておき、クリックされた、またはフォーカスが当った時に
setEditable:YESに変更、view外がクリックされた、またはフォーカスが外れた時にsetEditable:NOに
するにはどうすればよろしいのでしょうか?

他のボタンでsetKeyEquivalent:@"半角スペース"などで設定した時に、NSTextViewにキーイベントを
取られるのを防ぎたいのです。

よろしくお願いします。 <> 名称未設定<>sage<>2008/11/22(土) 22:11:15 ID:v4sMs7r70<> >>330
すいません、Core関係は全く触った事無く扱い方自体知らないんですが、参考になる日本語ページとか無いでしょうか? <> 名称未設定<>sage<>2008/11/22(土) 23:16:25 ID:W+1fjktw0<> >>333

- (void)action:(MyClass*)sender
{
...
}

ソースコード側は、こう書いてもいいんだよ。
<> 名称未設定<>sage<>2008/11/22(土) 23:18:38 ID:hv+kYqZ80<> id型が何か分かってないんだと思う <> 名称未設定<>sage<>2008/11/22(土) 23:26:23 ID:W+1fjktw0<> >>339
NSTextViewのサブクラスを作って、becomeFirstResponderとresignFirstResponderをオーバーライドすれば、できそうだけど。

ただ、NSTextViewからフォーカスが外れたら、そもそもキーイベントがNSTextViewに行く事は無いと思う。
<> 名称未設定<>sage<>2008/11/23(日) 00:08:59 ID:knCwFm3k0<> >>340
ちょうど良さそうなのが
ttp://cocoawiki.aerial.st/index.php?FrontPage <> 名称未設定<>sage<>2008/11/23(日) 00:16:15 ID:knCwFm3k0<> Cocoa Drawing Guide
ttp://www.mosa.gr.jp/?p=444 <> 名称未設定<>sage<>2008/11/23(日) 01:41:23 ID:fOaeIxBi0<> >>341
id の問題はおいとくとしても、 action メソッドで sender のプロパティに
アクセスしないといけない状況ってほとんどないと思うんだけど。
バインディングつかってないの? <> 名称未設定<>sage<>2008/11/23(日) 09:19:20 ID:iaCcgTxk0<> 継承関係が無いクラスをポリモルフィックに扱う時はid型を使うだしょ
その時の話をしていたのだがorz... <> 名称未設定<>sage<>2008/11/23(日) 09:32:18 ID:fOaeIxBi0<> >>347
そういう状況でなんでプロパティを読みとりたくなるのか
具体的な状況がまったくわからんのだが。 <> 名称未設定<>sage<>2008/11/23(日) 11:27:47 ID:iaCcgTxk0<> つうことで、propertyに違和感を感じるのは俺だけってことで...orz <> 名称未設定<><>2008/11/23(日) 12:33:34 ID:fOaeIxBi0<> orz とか言うのはいいけど、こっちの疑問に答えてくれないんでは
違和感も伝わらないんだけど ???
a.property というのは obj-c ぽくなくて違和感があるが、
それは >>349 の感じている違和感ではなさそう。

どういう局面で sender の property が読みたくなるの? <> 名称未設定<>sage<>2008/11/23(日) 14:14:58 ID:iaCcgTxk0<> クラスHogeとFugeがあって
@interface Hoge : NSObject {
int x,y;
}
@property int x,y;
@end
@interface Fuge : NSObject {
int x,y;
}
@property int x,y;
@end
こんな感じかな。そんでもってこんな感じで使って
Hoge* hoge = [Hoge new];
hoge.x = 10;
hoge.y = 5;
[self shift:hoge];
Fuge* fuge = [Fuge new];
fuge.x = 15;
fuge.y = 25;
[self shift:fuge];
んでメッセージを受ける方が
- (void) shift:(id)point
{
//point.x += 10; としたくなんない?
//point.y += 10; としたくなんない?
//いちいちキャストなんてやりたくないからこんなんなるでしょ。
[point setX:[point x] + 10];
[point setY:[point y] + 10]; //コードが統一できない...orz
}
簡単に書くとこんな感じ。動的なオブジェクト言語なんで無理矢理継承関係を持たずにシンプルに書きたいときが多いよね <> 名称未設定<>sage<>2008/11/23(日) 15:03:15 ID:lPFF9JrY0<> >>351
- (void) shift:(hoge *)point {

}



にすればええやん。 <> 名称未設定<>sage<>2008/11/23(日) 15:10:01 ID:qOiHI6Fa0<> それだとfugeが受け取れない <> 名称未設定<>sage<>2008/11/23(日) 15:10:47 ID:lPFF9JrY0<> 異なるクラスを1つのメソッドで処理したいのかが分からん。 <> 名称未設定<>sage<>2008/11/23(日) 15:17:00 ID:iaCcgTxk0<> orz <> 名称未設定<>sage<>2008/11/23(日) 15:31:04 ID:qOiHI6Fa0<> まあ、アプリを作るよりもコードの組み方に執心するのも悪くないが、
それで満足出来ないならこれ以上は無駄な議論になる。
自分で言語を作るか満足出来る言語を探すしかないな。 <> 名称未設定<>sage<>2008/11/23(日) 15:38:14 ID:iaCcgTxk0<> そこまで拘ってはいないんだけど、規模が大きくなると
可読性も重要になるもんでちょっと気になっただけです。
スレ汚しすまそん。 <> 名称未設定<>sage<>2008/11/23(日) 15:43:18 ID:NCg555PX0<> >>351
例としてそれが正しいんだとすると、クラス設計が間違ってるんじゃない?

>>354も言ってるけど、
同じプロパティ持ってて、なおかつ一つのメソッドで処理したいんなら
共通の親クラス持つべきでしょ。

> 動的なオブジェクト言語なんで無理矢理継承関係を持たずに
どっちかっつーと、継承させればいいのに無理矢理継承させなかったようににみえるよ <> 名称未設定<>sage<>2008/11/23(日) 15:58:16 ID:iaCcgTxk0<> サンプルの例は簡単すぎるけど、継承関係を持ちたくない動的なポリモルフィズムでは
プロパティは合わないってことかな。たぶん俺の設計が悪いんでしょう...。 <> 名称未設定<>sage<>2008/11/23(日) 15:59:47 ID:qbiNAB4B0<> >>358
いや、実際継承関係なしに同じメソッドを持たせたいときのためにプロトコルってもんがあるんだけどな…
プロパティ使ってもプロトコル作っとけばメソッドでアクセスは出来るだろうけどプロパティ構文でアクセスは出来ないか。

ていうかプロトコルみたいな基礎の基礎を理解してからプロパティみたいな(ある意味シュガーシンタックス)を使うべきだと思う。 <> 名称未設定<>sage<>2008/11/23(日) 15:59:59 ID:lPFF9JrY0<> >>359
具体的に何をしたかったのか気になるな。
こういう事は参考になるし、差し支えなければ教えてたもれ。 <> 名称未設定<>sage<>2008/11/23(日) 16:10:58 ID:5E7pfPDV0<> プロトコルって
たった一つの関数のために宣言するのも気が引けない・・・・・

それに今回の場合は二つのクラスがあってそれを第三者である別のクラスのメソッドを使用して
この二つのクラスのオブジェクトにメッセージを送りたいんでしょ?




<> 名称未設定<>sage<>2008/11/23(日) 16:20:45 ID:qbiNAB4B0<> >>362
メソッドの数は関係ないだろ…NSCopyingとか知ってる?
>>351の例で言えば、HogeとFugeが共通のプロトコルを実装していれば、継承関係がなくても
id <protocol> point2 = pointとすれば、少なくともメソッドでのアクセスはできるわけ。
まあid型なんだからメソッド呼ぶ分にはコンパイルエラーは出ないと思うが、静的型チェックしたい場合は。

こういう継承関係はないけどある程度のメソッドのセットを共有するクラスって、実際にアプリケーション作ってれば
結構あるんだけどな。プロパティってカテゴリとかプロトコル中で使えないんだっけ? <> 名称未設定<>sage<>2008/11/23(日) 16:22:46 ID:5E7pfPDV0<> メッセージを送りたいんじゃなくて
その二つのクラスを仮引数にしたいのか。

そうなると仮引数での型宣言がid型にならざるを得ない・・・

・・・hoge型を受け取るセレクタとfuge型を受け取るセレクタ
両セレクタを第3者のクラス(たぶんメインのほうなんだろうけれど)で定義すればいけるよね。

これだとソースも汚れないんじゃない? <> 名称未設定<>sage<>2008/11/23(日) 16:24:25 ID:NCg555PX0<> >>360
まぁインターフェースだけ持ちたい場合はそうなんだけど、
>>351の例じゃメンバも一緒だし、プロトコルじゃなくて継承があってるっしょ

例が簡単過ぎと言う事だから、何がしたいかによるけどさ
同機能の名称だけ違うクラスがあるようだったから、これを親クラス使わないテは無いんじゃない? <> 名称未設定<>sage<>2008/11/23(日) 16:31:47 ID:5E7pfPDV0<> >>363
そうなのか。
僕は研究で使うためのアプリケーションを作成させられているんだけど、
まわりにcocoaなんてやってる人がいないから、相談できる相手がいないんですよ。

だからイメージ的にプロトコルなんだから一つだけの関数のためにあっても仕方ないよなー
って感じだったんですよ。

でも確かにcocoaのプロトコルの存在理由を考えれば一つでもありですよね。

沢山のクラスで同じメソッドが使われている。
となればそのメソッドを一つの「Aプロトコル」と宣言しておけば

このクラスは「Aプロトコルに沿っています」となればその関数は使用できるってことがわかるわけだし。
その逆もしかりだしね。

<> 名称未設定<>sage<>2008/11/23(日) 16:33:55 ID:4U1xjB9Y0<> ある程度プログラムが出来上がったあとに、別個に作って来たクラスを共通の基底クラスに
乗せるのは厄介でできない、というのはデザイン云々はともかく実際問題としてあるかも。
C++ だと多重継承という逃げ道もあるが... あるいはテンプレート。

規模が大きくなると可読性が... とかいうなら、それこそプロトコルとかである程度縛りを
持たせないとまずい気がする。 <> 名称未設定<>sage<>2008/11/23(日) 16:35:19 ID:qbiNAB4B0<> >>365
>>351の例そのままなら誰だって継承を選択するし、継承ならプロパティもそのまま使えるからわざわざ質問なんかしないよ。 <> 名称未設定<>sage<>2008/11/23(日) 16:44:44 ID:5E7pfPDV0<> ごめん、366で納得しといて申し訳ないんだけど・・・・
今回の例でプロトコルをしようするってどういうこと?

何度も確認するんだけど、
今回の例は

第三者のクラスで実装されている一つのメソッドにおいて
二つのクラスを仮引数として受け取れるようにするには id型しかなくて

それだとわざわざプロパティとして定義してあるx,yなのにドット演算子を用いてアクセスできない

っていう不満なんですよね?

どの辺にプロトコル・・・・・・・・が関係するんですか? <> 名称未設定<>sage<>2008/11/23(日) 16:45:50 ID:qbiNAB4B0<> >>364
あ、そうか。
HogeまたはFugeをインスタンス変数として持つ第3のクラスを作って、
プロパティはそっちに実装すれば…って余計めんどくさいけど、どうしてもプロパティ使いたいならこれかw <> 名称未設定<>sage<>2008/11/23(日) 16:55:57 ID:qbiNAB4B0<> >>369
いや、プロパティじゃなくてメソッドだったらプロトコル使えるねって話。を俺がしてるだけw 混乱させたらすまん。 <> 名称未設定<>sage<>2008/11/23(日) 17:16:16 ID:bRvMtYeW0<> @protocol MyProtocol
@property int x, y;
@end

@interface A : NSObject <MyProtocol>
{ int x, y; }
@property int x, y;
@end

@interface B : NSObject <MyProtocol>
{ int x, y; }
@property int x, y;
@end

void printXY(id <MyProtocol> obj)
{ NSLog(@"%d, %d", obj.x, obj.y); }

面倒くせぇ。 <> 名称未設定<>sage<>2008/11/23(日) 17:19:54 ID:5E7pfPDV0<> 351の解決策
----Fugeクラス--------

int x,y //プロパティとして宣言

----Hogeクラス--------

int x,y //プロパティとして宣言

----第3のクラス--------
- (int) myMain(void){
  Fuge* fuge = [Fuge new];
Hoge* hoge = [Hoge new];


}

- (void) shift:(Fuge*)point
{
point.x += 10;


}
  <> 326<>sage<>2008/11/23(日) 17:20:53 ID:iaCcgTxk0<> 番号書いとかないと解らなくなりますね(^^;
話題がクラスの設計にまで発展していて恐縮してしまいます。

最初に戻りますけど、プロパティは便利だから使うんじゃなくて
静的な設計でしっかりとしたチェックを行う為に導入されたのかもしれませんね。
あ、でもメッセージを送信できてしまうのでそうでも無いのか。

プロトコルを使った設計もいいんですけど、ObjectiveCなのでAPIを作るとき以外は
あまり使いたくないと思ってしまうんですよね....

もっと使い込んで良い使用例を見つけてみます。サンクスアロット! <> 名称未設定<>sage<>2008/11/23(日) 17:21:33 ID:5E7pfPDV0<> ごめん途中でかきこんでしまいました・・・・

まぁ省くと
さらに
- (void) shift:(Hoge*)point
を作成して
myMainで

両方ともうけとれるんでは?と・・・・ <> 名称未設定<>sage<>2008/11/23(日) 17:22:27 ID:5E7pfPDV0<> >>374

ものすごく参考になる例でしたよ
こちらこそありがとう <> 名称未設定<>sage<>2008/11/23(日) 18:39:08 ID:wtDM58qW0<> 高度な話題の途中で申し訳ないんですが、
ファイルの有無を返すメソッドって何を使えばいいのでしょう?
例えば、
/Users/me/hoge.txt
を引数にして、hoge.txtがあればYES,無ければNoを返すようなものです。
で、もしあったらそれをhoge2.txtにリネームしたいのですが、
便利なメソッドありますか?

今はNSStringのinitWithContentsOfFileでエラーが出なかったら、
そのNSStringをwriteToFileで書き込んでるんですが、
無駄にメモリを使っているような気がします。 <> 名称未設定<>sage<>2008/11/23(日) 18:57:59 ID:CafrItRj0<> やっと答えられるネタがw

id fm = [NSFileManager defaultManager];
BOOL flag = [fm fileExistsAtFilePath:theFilePath];

でいいかと <> 名称未設定<>sage<>2008/11/23(日) 19:48:14 ID:knCwFm3k0<> ちなみに
- (BOOL)fileExistsAtPath:(NSString*)path isDirectory:(BOOL*)flag
でディレクトリかどうかも分かる <> 377<>sage<>2008/11/23(日) 19:48:57 ID:wtDM58qW0<> >>378さん
こういう時はNSFileManagerを使えばいいんですね。
ありがとうございます。参考になりました。 <> 名称未設定<>sage<>2008/11/23(日) 22:06:28 ID:UPPqK5k50<> インスタンス変数の先頭や後ろに_を付けたり、
mを付けたりしてるのをよく見掛けるのですが、
正式(もしくは通例)な書き方ってあるのですか? <> 名称未設定<>sage<>2008/11/23(日) 22:51:13 ID:zrPQcDP/0<> ないです <> 名称未設定<>sage<>2008/11/23(日) 23:08:33 ID:HpygaMZ60<> 俺の例で申し訳ないけど
1.あまり変数名を考えないで何もつけない
2._を付ける
3.mを付ける
4.変数名をよく考えて何もつけない
の順で進化(退化?)してきて、現在では何も付けないに固まりつつあるよ <> 名称未設定<>sage<>2008/11/23(日) 23:17:00 ID:lPFF9JrY0<> よく_を付ける人がいるけど、
あれってAppleが予約してるんだよね? <> 名称未設定<>sage<>2008/11/23(日) 23:27:30 ID:NCg555PX0<> mって懐かしいな
CodeWarrior PowerPlantの命名規則だっけ
<> 名称未設定<>sage<>2008/11/24(月) 01:10:28 ID:zG2/3T9r0<> 質問です。
10.4.11以降で実行(記述)出来るようになったメソッド(webView:didClearWindowObject:forFrame:)を
記述した場合、10.4.11以前のOSで起動したらどうなるのでしょうか?(落ちる?)

また、このメソッドを実行(記述)したくない場合、下記のように書けばよろしいのでしょうか?
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4(またはMAC_OS_X_VERSION_10_4_11?)
- (void)webView:(WebView *)sender didClearWindowObject:(WebScriptObject *)wso forFrame:(WebFrame *)frame
{
// いろいろ処理
}
#endif

稼働確認の環境がないもので(当方10.4.11)、これでいいのかよろしくお願いします。

<> 名称未設定<>sage<>2008/11/24(月) 01:17:47 ID:GByYYnXG0<> >>386
それはデリゲートメソッドなんで大丈夫。10.4.11より前では単に呼ばれなくなるだけ。 <> 名称未設定<>sage<>2008/11/24(月) 01:55:11 ID:zG2/3T9r0<> >>387
早速の回答ありがとうございます。
特に気にすることはないのですね。

あと、もう一つ便乗で申し訳ないのですが、
10.4.11でDeprecatedになったwebView:windowScriptObjectAvailable:を記述しても
呼ばれないのですが、(>>386のメソッドは記述しないで)
-(void)windowScriptObjectAvailable:(WebScriptObject*)wso
{
NSLog(@"windowScriptObjectAvailable");
}
何か記述がたりないのか、単に10.4.11でテストしてるから呼ばれないのか、
わからない状態です。
(ソースは@interface myWebView : WebView でサブクラスにしています)

<> 名称未設定<>sage<>2008/11/24(月) 04:04:16 ID:GByYYnXG0<> >>388
それもデリゲートメソッドなんだからWebViewのサブクラスに書くメソッドではないよ。
そもそも
- (void)webView:(WebView *)sender windowScriptObjectAvailable:(WebScriptObject *)windowScriptObject ;
だと思うんだが。そのコードじゃ呼ばれるわけがない。 <> 名称未設定<>sage<>2008/11/24(月) 14:03:19 ID:PGqxC8ff0<> Garbage collection有りのcocoa-Applicationで、
アプリの起動から終了まで、あるNSMutableArrayの中身を保持したいのですが
どういう風に宣言すればいいのでしょうか?
AppController Classのインスタンス変数として宣言すればいいのかなと思いましたが
うまくいきませんでした。 <> 名称未設定<>sage<>2008/11/24(月) 15:50:19 ID:HWz3ev+J0<> >>390
AppControllerが、どこからも参照されていないのではないかな。
NSAppのdelegateにすれば良いでしょう。
nibのfile's ownerからdelegateを接続すれば解決するでしょう
<> 名称未設定<><>2008/11/24(月) 17:07:43 ID:/NHK9Ydy0<> リファレンスカウンタを利用してみれば? <> 名称未設定<>sage<>2008/11/24(月) 17:13:33 ID:ljIgus1G0<> id型だとプロパティ構文が使えないのは、コンパイラが、それがプロパティへのアクセスなのか、構造体(または共有体)へのアクセスなのか区別できなくなるためです。
こういうときは、非公式プロトコルを使ってコンパイラを騙してしまえば、綺麗に書けると思います。

// 非公式プロトコル
@interface common
@property int x,y;
@end

// 非公式プロトコルを使うメソッド
- (void) shift:(common*)point { point.x += 10;}

あとは、>>352>>375が言ってることといっしょです。 <> 名称未設定<>sage<>2008/11/24(月) 17:22:33 ID:ljIgus1G0<> >>381
Cocoaの場合、インスタンス変数名が、そのままプロパティ名や、KVCのキーになったりするので、プリフィックスを付けずに、そのままの名前で書くのがよいと思います。
逆に、メソッドの引数や、ローカル変数側にプリフィックスを付けるのが、Cocoa流なのではないかと最近思ってます。
よくメソッドの引数名で、anObjectとか、aStringとか見かけます。
>>384の言ってる通り、_はアップルが予約してるので使えませんが、ローカル変数名なら使っても問題ないはず。
<> u16249.koalanet.ne.jp <>sage<>2008/11/24(月) 19:10:15 ID:8eRKNHGE0<> >>394
眼からうろこ落ちた。おれも今日から引数やローカル変数の方にプリフィックス付ける!!
一応、ローカル変数はPowerPlantからの癖でtheを付けてるけど、引数の
方はinとかoutをつけるとメソッド名とかぶってむずがゆいです。
anとかaはいいね。複数だとobjectsとかObjectsArrayとかにしてますか?
<> 名称未設定<><>2008/11/24(月) 20:05:56 ID:/NHK9Ydy0<> >>393
なるへそ <> 名称未設定<><>2008/11/24(月) 20:23:03 ID:lYcKzgoR0<> >>35がすごすぎてへこんだorz

自分もがんばるぞ。 <> 名称未設定<><>2008/11/24(月) 20:31:56 ID:GzPVuqFS0<> Xcode 3.1を使用しています。

Safariの"Advanced"環境設定や、
iTunesの"General"環境設定などで見かける、横線を表示したいのですが、
どのようにしたら良いのでしょうか。 <> 名称未設定<>sage<>2008/11/24(月) 20:32:59 ID:GzPVuqFS0<> ごめんなさい、IBのLayout Viewsのところにありましたorz <> 名称未設定<>sage<>2008/11/24(月) 20:46:50 ID:NpEGxfAA0<> >>389
指摘のメソッドに変えたらうまくいきました、ありがとうございます。 <> 名称未設定<>saga<>2008/11/24(月) 20:49:20 ID:6rT9ICRJ0<> なんだかんだいってもCocoaでプログラミングするのは楽しいな
ハマル事も多し、標準フレームワークの実装には文句もあるけどね
超高速NSTableViewとか作ってみたけど公開してみようかな <> 名称未設定<><>2008/11/24(月) 21:31:36 ID:/NHK9Ydy0<> >>401
dictionaryを展開させるやつならぜひ <> 名称未設定<>sage<>2008/11/24(月) 21:32:23 ID:6a5Gwn4E0<> 15万件でもサクサクですか? <> 名称未設定<><>2008/11/24(月) 21:37:10 ID:/NHK9Ydy0<> mac miniで多重スレッドでのプログラム処理は大丈夫ですか? <> 名称未設定<>sage<>2008/11/24(月) 21:40:03 ID:CRbch+U60<> >>401
1万件のCocoaBindingで、PBG4だと1分待たされました。
是非高速版がほしいですw。 <> 名称未設定<>sage<>2008/11/24(月) 21:48:00 ID:6a5Gwn4E0<> でもそれはアレイコントローラーが高速にならないと。

余談だけど、NSTableViewでサムネ画像など表示させた場合、
描画領域内にある行だけ画像表示させるのって簡単なんですかね? <> 名称未設定<>sage<>2008/11/25(火) 00:31:44 ID:n8XQ2L280<> >>406
ふつうに datasource メソッドを実装すれば
描画領域にある列、行のサムネイル画像を NSTabelView が要求してくるから、
その場でサムネイルつくって返せばいいだけだけど。
NSTableView って配列を先に全部与えて表示するものと勘違いしてない? <> 名称未設定<>sage<>2008/11/25(火) 20:37:50 ID:fTXxDM330<> アレイコントローラーの配列にNSImageで持たせるか、
画像のパスだけ持たせておいて
データソースで描画内だけNSImageを作成するかの
違いってことかな? <> 名称未設定<>sage<>2008/11/25(火) 21:57:22 ID:R26T1kav0<> >>405
1万行あるテーブルなんて、特定の行を探すのが大変そう。
ユーザーインターフェースの設計を考え直した方がいいと思う。 <> 名称未設定<>sage<>2008/11/26(水) 01:33:15 ID:P35jjkPN0<> 文字列オブジェクトは日本語でも全く問題ないよね。
でもそれをC言語のchar型の文字列ポインタにUTF8stringで代入しようとしたら文字化けするんですが、
なぜなんでしょうか?

<> 名称未設定<>sage<>2008/11/26(水) 06:25:24 ID:xQANSJuC0<> >>410
文字化けしているかしていないかはその char* をどう使ったかによります。
どうやって char* を表示させたのか書いてくれないとわかりません。 <> 名称未設定<>sage<>2008/11/26(水) 14:48:24 ID:GK26HTBC0<> >>390
[[NSGarbageCollector defaultCollector] disableCollectorForPointer:myMutableArray]
では駄目なの?(それか、グローバル変数として作るとか) <> 名称未設定<>sage<>2008/11/26(水) 15:47:10 ID:QSxwsUJ30<> NSWindowをsetLevelでNSNormalWindowLevel以外にするとExposeの時消えてしまいます。
Exposeの対象にする方法はないでしょうか? <> 名称未設定<>sage<>2008/11/26(水) 18:44:35 ID:0RmgUrO80<> NSAppleScriptのexecuteAndReturnErrorで
スクリプトファイルからスクリプトを実行する時に
引数を渡す方法ってありますでしょうか…
<> 名称未設定<>sage<>2008/11/26(水) 19:41:31 ID:FophLCsx0<> >>413
この辺関係ありそう
http://www.cocoadev.com/index.pl?DontExposeMe
http://www.cocoadev.com/index.pl?CoreGraphicsPrivate

>>414
スクリプトの引数の部分に%@とか書き込んでおいて、
NSString *src1 = [NSString stringWithContentsOfFile:scriptFile];
NSString *src2 = [NSString stringWithFormat:src1, arg1, arg2…];
NSAppleScript *as = [[[NSAppleScript alloc] initWithSource:src2] autorelease];
NSAppleEventDescriptor *dsc = [as executeAndReturnError:nil];

とするのは? <> 名称未設定<>sage<>2008/11/27(木) 02:46:01 ID:B6cixQN+0<> マックから異なるサーバに
メッセージを書き込みに行くときに
日本語が含まれていると、かなり酷い文字化けして格納されるよね。

windowsからxコードで記述したプログラムを見てみると同様に文字化けするし・・・・
一応環境設定でデフォルトのエンコードは「Shift JISS」にはなっているんですが。

<> 名称未設定<>sage<>2008/11/27(木) 03:18:48 ID:37LWSc7G0<> >>416
>マックから異なるサーバに
>メッセージを書き込みに行くときに
>日本語が含まれていると、かなり酷い文字化けして格納されるよね。
異なるサーバってどういう意味?
ファイルサーバ? それとも HTTPサーバにポストする場合のこと?
ここにいるひとだってエスパーじゃないんだから、もうちょっと
他のひとが読んでも判るように心がけて書き込みしたらいいんじゃない?

ファイルサーバだったら書き込む際に文字コード指定して
書き込めばいいだけだし、
POST とか URL のエンコードがうまくいかないのは
html の form で文字コードをちゃんと
指定してないからで Mac のせいじゃないよね。
Google で検索するときは windows からでも mac からでも
日本語で検索出来るわけでさ。

まあそれはともかく、悪い事は言わないから Windows だけで済まない場合は
もう Shift-JIS を使うのは止めて全部 Unicode ベースにしたほうがいいと思う。 <> 名称未設定<>sage<>2008/11/27(木) 05:13:33 ID:B6cixQN+0<> >>417
返信ありがとうございます。

サーバはデータベースサーバのことです
言葉足らずで申し訳ございません。

そのUnicodeベースにしたほうがいいって言うのは
どういうことでしょうか?
環境設定でそうしろってことですか?
<> 名称未設定<>sage<>2008/11/27(木) 05:22:59 ID:37LWSc7G0<> 申し訳ございませんと丁寧に謝っていただくより、
もっと細かい状況をおしえてもらったほうがいいんだけど...
データベースサーバのことです。ってたって何種類もあるでしょ。

データベースサーバとはどうやって通信してるの?
Mac 用のクライアントソフトがある?それとも http 経由?
データベース側では文字列は文字コードは何を使うと決めてある?
Mac 側から送る文字コードはデータベースサーバ側が期待している
文字コードになるようにしてますか?

そのあたりはいろいろな設定が関わってくる問題で、
あなた独自の暗黙の了解が通じるところではないです。
Windows な人なら Shift-JIS が好きかもしれないし、
Linux ベースのサーバなひとなら当然 EUC かもしれないし、
Unicode で XML つかってるひとなのかもしれない。
あなたがそのうちどれなのかは説明してもらわないとわからんです。

単に「マックから書き込むと文字化けするよね」という問題じゃ
ないと思いますが...
Windows サーバに Windows のクライアントソフト/ブラウザから
書き込むばあいでも、IE じゃ文字化けしないけど Firefox だと化けるとか
そんなこともあるでしょ。
よく判らない場合は Windows + IE に閉じこもっていたほうが
安全だと思います。

全部 Unicode ベースというのは、XCode もユニコード、
データベースサーバもユニコード、Windows でもユニコードということです。
そうできる権限があるなら、そうしたほうがあとあと楽だと思いますが。 <> 名称未設定<>sage<>2008/11/27(木) 05:30:59 ID:B6cixQN+0<> データベースサーバはPostgresQLをつかっています。
通信方法はそこで用意されている
libpqというC言語用のAPIを使っています。

ですからUTF8StringでC言語用の文字コードにエンコーディングしてから
Posgreで用意されている関数に渡すことでデータベースに書き込みに行っています。

その時に表のセルに日本語の文字列を書き込みにいくと文字化けして格納されてしまいます。
ただ同じようにWindowsのエディッタで作成したプログラムで書き込みに行くと
文字化けを起こしません。

まったく同じプログラムなのですが・・・・・・

後、再度返信ありがとうございます。 <> 名称未設定<>sage<>2008/11/27(木) 06:06:19 ID:37LWSc7G0<> >>420
それはちゃんと表のセルに入力した文字列が
UTF8 の文字列に変換されてないんだと思います。

お礼をいただくよりも、暗黙の仮定を減らしていただいたほうがいいんですが、
GUI のプログラムは何のフレームワーク使って書いているんですか?
あなたの >>420 の書き込みを僕が読んで、
どういう言語でどういう GUI ライブラリをつかってプログラムしているか
僕が読みとれると思いますか?思いませんよね。
自分以外のひとが読んで判らないところがないだろうか、
考えて書き込んでくださると助かります。

ですから、「GUI のフレームワークはこれこれで、
文字列クラスは std::string なり NSString なり QString なりを使っていまして、
これこれこのように GUI から渡ってきた文字列を
C の char* に変換しているのだがうまくいきません。
どうすればいいですか?」
というふうに聞いてくれるといいんですけど。

あとこれは Mac のせいじゃなくてあなたのプログラミングのせいでしょう。 <> 名称未設定<>sage<>2008/11/27(木) 06:15:15 ID:B6cixQN+0<> >>421
僕も自分のプログラムのせいなのかなと考え
実はC言語だけでCUIプログラムを作成して送信したんです。

char command[250];

sprintf(command,"insert into table (id,name)values('101','田中康夫');");

PQexec (conn,command): //PQexec(接続先データベースサーバ情報を格納した構造体ポインタ,実効命令)

これと同様にWindowsのエディッタで作成し実行したところ、こちら側では
田中康夫が文字化けせずに格納できました。

<> 名称未設定<>sage<>2008/11/27(木) 06:20:31 ID:B6cixQN+0<> あとまた言葉足らずになってしまっていたので、

ですからXコードの文字エンコードの問題かなと考えるにいたったんです。

環境設定ではShift-JISSにしています。

以前マックのターミナルで
データベースサーバからの情報を受け取ったとき
同じように日本語が文字化けを起こしていたので、
環境設定でShift-JISSにしたところ問題が解決されたことがあります。

ですが今回、データベースサーバに日本語の文字列を格納する際に
すでに文字化けを起こして格納しているみたいです。

なんども言うようですが、windowsのエディッタで作成すれば、全く問題ありません。 <> 名称未設定<>sage<>2008/11/27(木) 06:24:07 ID:37LWSc7G0<> なんか Cocoa じゃないですね、皆様失礼しました。Mac でプログラミングスレ
http://pc11.2ch.net/test/read.cgi/mac/1216824430/
に移動しましょう。以下返信はそちらにします。 <> 名称未設定<>sage<>2008/11/27(木) 16:33:22 ID:rWXcKYWw0<> 低スキルが間違いをOSのせいにする典型例だな。 <> 名称未設定<>sage<>2008/11/27(木) 20:01:20 ID:hCNJMOhd0<> unsinged char data = 0xaa;
はできますが
unsinged char data = 0b10101010;
は出来ないのですね。

2進数を使いたい部分があるのですが、どう扱えば良いのでしょうか? <> 名称未設定<>sage<>2008/11/27(木) 20:49:24 ID:wLn06wmd0<> #define b00000000 0x00
...
#define b10101010 0xaa
...
#define b11111111 0xff <> 名称未設定<>sage<>2008/11/27(木) 21:46:16 ID:t7oDCkvv0<> ぬはは、なんという発想の転換 <> 名称未設定<>sage<>2008/11/27(木) 23:21:44 ID:PejjknVj0<> >>427
それって、なんの意味があるんだ?
2進数を使いたいっていう話なのに、それだと実質上16進数だろ <> 名称未設定<>sage<>2008/11/27(木) 23:57:32 ID:M0fGLrHO0<> データタイプにbitがある言語使うとか。

まあ、普通は10進なり16進なりで処理するべ <> 名称未設定<>sage<>2008/11/28(金) 00:11:57 ID:ng41BnSv0<> 基数変換はプログラミングの初歩だぞ。自分で作れ。 <> 名称未設定<>sage<>2008/11/28(金) 00:16:55 ID:/Q9QB/Oa0<> gcc拡張で無かったっけ? <> 名称未設定<>sage<>2008/11/28(金) 00:35:02 ID:vpfLJ8rB0<> Cの仕様には含まれてないんですよね。
私は「計算機」のプログラマモードで16進と変換したりしてます。 <> 名称未設定<>sage<>2008/11/28(金) 01:07:35 ID:G1SWboG00<> >>414
NSAppleScriptは最低機能のラッパだからできない。
OSAを直接使えばパラメータ与えてハンドラ呼び出したりとかできる。
探すべきキーワードはOSADoEvent kASSubroutineEventあたり。
さらに言えば、パラメータ必要になる様なことやるなら、Scripting Bridge
使うかAppleEvent使う方が良い。AppleScript介すると遅いし不安定なだけ。 <> 名称未設定<>sage<>2008/11/28(金) 15:32:11 ID:xfBeI8Px0<>  if([self なんたら]){
  if([self こうたら]){
   if([self どうたら]){
    if([self ふんたら]){
     if([self ちんたら]){
      // OK牧場
     }
    }
   }
  }
 }

こういう書き方って一般的なんですかね? <> 名称未設定<>sage<>2008/11/28(金) 15:50:33 ID:dEcFhsPw0<> 好み。

おれは深いインデント嫌いなので、
if(![self なんたら]){
return booooo;
// goto boooo;
// @throw boooo;
}
if(![self こうたら]){
return booooo;
}
if(![self どうたら]){
return booooo;
}
if(![self ふんたら]){
return booooo;
}
if(![self ちんたら]){
return booooo;
}
// OK牧場

か、
if([self なんたら]
&& [self こうたら]
&& [self どうたら]
&& [self ふんたら]
&& [self ちんたら]){
// OK牧場
}
だね。
<> 名称未設定<>sage<>2008/11/28(金) 19:59:09 ID:dDOC0C8d0<> >>436
>if([self なんたら]
>&& [self こうたら]
>&& [self どうたら]
>&& [self ふんたら]
>&& [self ちんたら]){
>// OK牧場
>}

これに一票。Cの&&は前方から順番評価なので、これでOK。 <> 名称未設定<>sage<>2008/11/28(金) 21:31:38 ID:3W0bMjsI0<> >437にもう一票だが、それ以前に5重の&&をもっと簡略化できないかに頭を捻るな、自分なら。

(どうしても回避しきれない場合とか、無駄に凝るより素直にまとめて書いたほうが良い場合が
あるのはもちろん承知だが、それでも)。
<> 名称未設定<><>2008/11/28(金) 21:39:40 ID:72PQStUNP<> 順番評価ってことは、一度否定が出たら以降は無視されるんだよね? <> 名称未設定<>sage<>2008/11/28(金) 21:47:32 ID:Bb35kMPW0<> 仕事で3000行のforループとか300行オーバーのif文とか
悶絶するコードの改修を体験しことがある。 <> 名称未設定<>sage<>2008/11/28(金) 23:09:54 ID:OvBIZwt90<> >>438
switch文が数値以外の値も評価できるようになればいいのかもしれんね。
...別に簡略化にできてないか <> 名称未設定<>sage<>2008/11/28(金) 23:28:41 ID:GUz35KBi0<> ちょっと違うかもだが、
>>436の前の方の用な感じで、
全体を@try{}で囲み、
否定が来たら、returnするのではなく、理由付きの例外を発生させる。
んで、@catch{}で、何故否定されたのか見れるようにする。
こうしとくと、後々検証に便利。

<> 名称未設定<>sage<>2008/11/28(金) 23:49:35 ID:/Q9QB/Oa0<> 俺は条件に合わない時は
早々に退場願いたいので

if(!([self なんたら]
&& [self こうたら]
&& [self どうたら]
&& [self ふんたら]
&& [self ちんたら])){
return booooo;
}
// OK牧場

>>442
例外使う意味が分からん。
NSLog()で十分な気がするんだが。 <> 名称未設定<>sage<>2008/11/29(土) 00:01:57 ID:jESPa+9z0<> >>442
そういうことをしたいなら、NSAssertを使った方が、ソースが綺麗になると思う。 <> 名称未設定<>sage<>2008/11/29(土) 04:55:28 ID:5SNi5rkK0<> 悶絶するようなコード笑ったw
昔書いてたから余計にw
<> 名称未設定<>sage<>2008/11/29(土) 06:19:50 ID:nZKJ5UOy0<> あれ、>>435は、実際にはそれぞれの if の中には多少の処理があるんじゃないの?
それともそれは [self どうたら] とかの中に入ってるの?

>>436
return したくないときもあるわね。

>>442
ifの条件が別に例外じゃない場合はよくないよね。まあ「何が例外か」問題があるわけだが。

>>444
>>442 に引きずられているのかもしれないが、
assertは本来事前条件の検証をするためだけのもので、プログラムの条件分岐に使うものでは
ないと思う。 <> 名称未設定<>sage<>2008/11/29(土) 08:38:53 ID:TUbod1RH0<> >>443
ちょっと待ってw
それ途中でぬけます?
処理時間が微妙に増える恐怖が襲ってきました
理屈じゃないですw <> 名称未設定<>sage<>2008/11/29(土) 08:53:47 ID:+QW0vt7S0<> 条件で除外して行く様な処理はdo while(0)で書くね。
単純なif文では間に処理が挟まると書けなくなる。
スコープ明示して可読性上げる目的でも有効な手法
do {
 if (除外条件1) break;
   :
 if (除外条件2) break;
   :
 if (除外条件3) break;
 // 全条件を満たした
}while(0); <> 名称未設定<><>2008/11/29(土) 21:26:44 ID:YVMtZIRG0<> >>448

なるへそ!

<> 名称未設定<>sage<>2008/11/30(日) 00:13:49 ID:hhtkbghE0<> >>448
do while(0) は目から鱗。
今まで goto で頑張ってたのが必要が無くなった。
これで gotoを全廃できそうだ…… <> 名称未設定<>sage<>2008/11/30(日) 00:53:06 ID:sGbGiZTZ0<> >>448はCなんかのバッチ処理のmain関数でよく使う手ですね。
途中の処理で落ちたらbreakで抜けて異常終了とか。
<> 名称未設定<><>2008/11/30(日) 04:17:53 ID:hSGWx1Tc0<> XCodeでentityを追加する時に押すボタンのように、
スライダーの左にボタンを起きたいのですが、
どうやればいいのでしょうか? <> 名称未設定<>sage<>2008/11/30(日) 11:32:42 ID:yoqGZQDC0<> ごめん。なんで while( 1 ) や for ( ; ; ) でなく do while(0); なの?

do while() 句は、長文になったとき抜け出す while 条件の見通し(今回は while(0) だけど)が悪くなってしまうから、ループでの使用順位として低い位置にあるとおもう。普通に while(1) {}; でいいと思うのだけど。 <> 名称未設定<>sage<>2008/11/30(日) 11:53:00 ID:Sn0/sJgv0<> while(1) や for(;;) は無限ループだけど、
do{ ...} while(0); は一回だけ実行。
{ ... } とほとんどかわらないけど、break で脱出出来るということを使っている。 <> 名称未設定<><>2008/11/30(日) 11:58:07 ID:bVIoA/Vw0<> >>454
>do{ ...} while(0);

複数行のマクロでよくみるけどこんな使い方もあるんだな <> 名称未設定<>sage<>2008/11/30(日) 14:11:33 ID:R4fMeWPr0<> >>454
なるほど、それは便利かも。今度使ってみよう。
しかしほとんどCocoaと関係ないww <> 名称未設定<>sage<>2008/11/30(日) 18:53:58 ID:is5S+TiE0<> Cocoaからアプリケーションの「パッケージ内容を表示」するには?
NSWorkspaceだとアプリケーション自体が表示されて
パッケージ内を開いてくれません。
<> 名称未設定<>sage<>2008/11/30(日) 20:15:19 ID:8UXDFhzQ0<> 多分用意されてないと思う

ちなみにパッケージ内を見せる別の方法として NSSavePanel で setTreatsFilePackagesAsDirectories:YES するってのはある <> ネタですよ<>sage<>2008/11/30(日) 20:28:41 ID:NRo7NNXS0<> 質問です。
cocoaの隠しAPI、NSBoomって何に使うのですか?
<> 名称未設定<>sage<>2008/11/30(日) 20:38:11 ID:xGKlfZKq0<> >>459
BoomというSteveの声にあわせてExposeが動く。 <> 名称未設定<>sage<>2008/11/30(日) 20:50:01 ID:v52HvDmO0<> >>457
NSString *path = @"/Applications/Safari.app/Contents/Info.plist";
BOOL flag = [[NSWorkspace sharedWorkspace] selectFile:path
inFileViewerRootedAtPath:nil];

無理矢理だけど、これで/Safari.app/Contents/が開く。 <> 457<>sage<>2008/12/01(月) 00:15:19 ID:bRkyOVlu0<> >>458
ないですか、残念。
>>461
パッケージ内にあるフォルダなら普通に開けるんですよね
NSString *path = @"/Applications/Safari.app/Contents";
[[NSWorkspace sharedWorkspace] selectFile:nil inFileViewerRootedAtPath:path];
<> 名称未設定<>sage<>2008/12/01(月) 11:07:48 ID:Y2za4y4W0<> >>450
gotoの替わりに使ったりしないで、使いたい時はgotoでいいんじゃない?
はっきりラベルで行き先が明示されている方が可読性も良いと思うし。
breakで抜けるループが1重ならいいけど多重になってたりするとわけ解らなく
なりやすいよ。
<> 名称未設定<>sage<>2008/12/01(月) 11:21:31 ID:/OHo/hwy0<> NSTableViewで40行程度の表示をしようとしています。
Tableの大きさは8行程度でその部分は表示できているのですが、
縦スクロールバーが機能してくれません。
どのように設定すれば、スクロールバーとTableの中身が同期するのでしょうか? <> 名称未設定<>sage<>2008/12/01(月) 11:40:47 ID:FFcDafTQ0<> >>464
インターフェースビルダーで作ったら何もしなくても
自動でスクロールがきくはずだけど。
配置したところでインスペクタを開いて、
何回かクリックしていたら順に
スクロールビュー、テーブルビュー、テーブルカラムの順に設定出来るので
そのへん確認してください。 <> 名称未設定<>sage<>2008/12/01(月) 13:31:33 ID:tfI3OpAZ0<> >>464
スクロールをOFFにしてない?
TableViewを作り直した方が早いかもしれない。 <> 464<>sage<>2008/12/01(月) 15:15:48 ID:/OHo/hwy0<> TableViewを作り直しても、うまく行きません。。。
どこかの僕が勝手にいじってしまう可能性もあるので、今回設定したのは
Scroll View AttributeのShow Horizontal Scrollerのチェックを外した。
Table Headerに文字を入れた。
Table Column attributeで各Columnのidentifierを設定した。
だけなのですが、まず縦のスクロールバー自体が表示されません。
(Automatically Hide Scrollerはチェックしていないのに、Hide状態になっています)。
一体何がどうなっているのでしょう? <> 名称未設定<>sage<>2008/12/01(月) 15:56:05 ID:tfI3OpAZ0<> >>467
それは面妖な。
IBで実行した時点でスクロールバーが消えてますか? <> 464<>sage<>2008/12/01(月) 16:44:53 ID:/OHo/hwy0<> >>468さん
IBの時点でバーの矢印と青い丸は表示されていません。
そこで縦スクロールバーをクリックして、
Scroller attributeをEnableにすると、矢印は出ますがやはり青丸は出ません。

その状態でアプリを実行すると、スクロールバーは矢印無し青丸ありのままです。
さらにアプリ起動中にスクロールバーをクリックすると青丸が出現します。
しかしその青丸をスライドさせても、TableViewの中身は変わりません。
現状こんな具合でさっぱりです orz <> 名称未設定<>sage<>2008/12/01(月) 17:18:39 ID:9aAmboBn0<> - (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView;
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row;
の実装はどうよ??

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
return 8;
}
とかって事はないだお?? <> 名称未設定<>sage<>2008/12/01(月) 17:23:10 ID:9aAmboBn0<> あるいはデータソースを呼び出すメソッド名を間違えてるとか。
デリゲートとか、非形式プロトコルだとそーゆー場合はエラーでないよ。 <> 464<>sage<>2008/12/01(月) 17:52:34 ID:/OHo/hwy0<> すいません、訂正です。
>その状態でアプリを実行すると、スクロールバーは矢印無し青丸ありのままです。
この行は、「矢印有り青丸無し」の間違いでした。

>>470さん
TableViewをいっぱいに広げると下の方まで表示されているので、
その二つのメソッドに問題は無いと思います。
データソースを呼び出すメソッドとは何でしょうか?
僕はIBでTableViewからdataSourceに青線を繋ぐ方法で呼び出してるつもりです。 <> 名称未設定<>sage<>2008/12/01(月) 18:38:40 ID:tfI3OpAZ0<> >>470
データソースが空でもスクロールバーは表示されると思うけどね。
こんな症状は初めて聞いたかも知れない。 <> 名称未設定<>sage<>2008/12/01(月) 21:43:33 ID:4xQMOEp30<> これからCocoaアプリに初挑戦する者です。
アプリケーションを設計前ってところなんですが・・・
MVCモデルに照らすとコントローラの数と言うのはひとつのアプリにひとつに
するべきなんでしょうか?
それとも、スレッド数分とする方が良いのか、いくつあろうと構わないもの
なんでしょうか?

<> 名称未設定<>sage<>2008/12/01(月) 22:05:19 ID:ocl8xgfY0<> >>474
コントローラの数は、1アプリにつき1つにする必要もないし、スレッドに関係する訳でもありません。
コントローラの数は、アプリケーションの規模によります。
小規模なアプリなら、1つで足りるかもしれません。大規模なアプリなら、複数必要になるでしょう。 <> 名称未設定<>sage<>2008/12/01(月) 22:05:40 ID:Y+dyBgaw0<> 端的に言うと山盛り一杯?

一口にコントローラって言っても色々有ったりします。
これどうぞ。
http://developer.apple.com/jp/documentation/Cocoa/Conceptual/AppArchitecture/

http://developer.apple.com/jp/documentation/Cocoa/Conceptual/CocoaFundamentals/
「Cocoaのデザインパターン」の「Model-View-Controllerデザインパターン」 <> 名称未設定<>sage<>2008/12/01(月) 23:40:24 ID:b7ZJ0Q1q0<> お、デベロッパページの日本語化がだいぶ進んできた?

て、フレーム内の「リファレンス」が全部リンク切れw <> 名称未設定<>sage<>2008/12/02(火) 12:44:09 ID:DiP/2Yku0<> >>472
XCode のバージョンと OS のバージョンは?
とりあえず XCode の最新版を再インストールしてみるのはどうでしょう。
それはあきらかに IB の挙動がおかしいとおもう。

最低限症状が出るプロジェクトをかためてアップローダにおいてください。
こっちでチェックできるので。 <> 名称未設定<>sage<>2008/12/02(火) 13:23:02 ID:qRW1sZo10<> nibファイルが壊れてるとかね
挙動がおかしいときは別フォーマットで保存で治ることもある <> 名称未設定<>sage<>2008/12/02(火) 17:58:15 ID:N8ybeWLx0<> ファイルやフォルダのアクセス権の変更ってできますでしょうか…
AppleScriptからUNIXコマンド実行しないと無理? <> 名称未設定<>sage<>2008/12/02(火) 19:09:33 ID:N8ybeWLx0<> あ、てかNSTaskで実行すればいいのかw <> 名称未設定<>sage<>2008/12/02(火) 19:32:22 ID:r/ZHQGK80<> NSFileManagerでなんかなかったっけ? <> 472<>sage<>2008/12/02(火) 20:50:22 ID:if+xUuvJ0<> >>478さん
XCodeは3.1.1 OSは10.5.5、どちらの最新のはずです。
関係する所だけを集めたちっちゃいプロジェクトを作りました。
http://gonzo.dip.jp/~gonzo/cgi-bin/uploader2/upload.cgi?mode=dl&file=743
DLKeyは table です。
よろしくお願いします。 <> 名称未設定<>sage<>2008/12/02(火) 22:39:55 ID:qRW1sZo10<> >>483
listManagerが無いのにdataSource繋げるからいかんのか

IBのdataSourceリンクを外して、
listManager = [[ListManager alloc] init];
のあとに
setDataSource
すればおk <> 名称未設定<><>2008/12/02(火) 22:44:57 ID:qFEE5ZYl0<> こんばんは。
>>452
ですがクラス名など分かりましたら教えてほしいです <> 名称未設定<>sage<>2008/12/02(火) 22:51:42 ID:BP+tmKAT0<> >>483
>>484のでもいいし、dataSourceアウトレット切らなくて済む方法としては
listManager = [[ListManager alloc] init]; のあとに
[tableView reloadData];
でもいいし、
AppControllerのinitのときに
-(id)init {
self = [super init];
listManager = [[ListManager alloc] init];
return self;
}
でもいいけどとにかくawakeFromNibの呼ばれるタイミングと、TableViewのDataSourceメソッドが呼ばれるタイミングの問題じゃないかな。 <> 名称未設定<>sage<>2008/12/03(水) 13:15:23 ID:EynOQwwp0<> >>486
ていうか IB で listManager を実体化して
(Objectのアイコンをライブラリからドラッグ&ドロップして、
インスペクタでクラスを ListManager に変更)
しまえば、awakeFromNib とのタイミングとの問題もなくなると思うし、
コードも二三行短くなるかな... <> 472<>sage<>2008/12/03(水) 17:26:51 ID:O7b6E22H0<> おお、あっという間に様々な解答が!
タイミングの問題だったのですね。自分だけで考えてたらわからなかったと思います。
皆さんありがとうございました。
今は484さんのコードにして、ちゃんと動いております。 <> 名称未設定<>sage<>2008/12/03(水) 19:12:38 ID:G3lcVDRU0<> >>488
listManagerは、そのアプリケーションの中で、モデルという位置づけにあるように見えるので、>>486の言う通りinitの中で生成するのが正攻法だと思います。
awakeFromNibは、基本的にnib内のオブジェクトを初期化するコードを書きます。
nibファイル内には、通常モデルは配置しません。 <> 名称未設定<>sage<>2008/12/03(水) 23:15:10 ID:EynOQwwp0<> データソースはコントローラだとおもうんだけど。
だから nib 内で作っても問題ない... と言ってみる <> 名称未設定<>sage<>2008/12/04(木) 00:20:15 ID:OWKazUoG0<> >>490
ソースを見ると分かる通り、AppControllerがNSTableViewのデータソースです。
もちろんこのプロジェクトは単なるサンプルでしょうから、本来の構造がどうあるべきかは分かりませんが、
どっちかというとlistManagerはモデルだと思われます。
コードを短くしたいならこの場合、AppControllerとlistManagerを合体させてしまえばいいんですが、それが目的ではないでしょう。 <> 名称未設定<><>2008/12/04(木) 20:28:32 ID:HGZjTiEG0<> -(void)mouseDown:(NSEvent*)evを実装したいんですが、
ただXコードで書いただけではなにも反応がありませんでした。・・・当たり前ですけど。

で該当するViewのデリゲートにコントローラを登録してみたのですが、
これもだめでした。

どうすればいいのでしょうか? <> 名称未設定<>sage<>2008/12/04(木) 20:51:12 ID:AvJljesh0<> >>492
NSViewから派生させたクラスで、mouseDownメソッドをオーバライドしたってこと?

なら、IBで、ウインドウにCustomView貼って、クラス名を変更すれば動くはず。

カスタムコントロールについては、
ttp://www.stripe-net.jp/cocoa/documents/chapter2/chapter2-1.html
が分かりやすかったです。 <> 名称未設定<>sage<>2008/12/06(土) 17:10:09 ID:9Wq0jq3Y0<> Cocoa applicationのテンプレートで作成されたMainMenu.xibの
File's owrnerとapplicationの違いは何ですか?
どちらのdelegateにクラスを接続してもNSApplicationのデリゲートとして動く。
優先度がapplicationの方が高いだけで同じ? <> 名称未設定<>sage<>2008/12/06(土) 17:54:57 ID:k7xoKMxV0<> 意味は違うけど、ものは同じ。

両方に違うオブジェクトをdelegateにすると多分、
File's Ownerが最後にsetDelegate:されると思うから、
File's OwnerのDelegateが最終的にNSAppのdelegateになるんじゃないかな?

あれ?
File's Ownerが一番最後と決まってるのはawakeFromNibだけだったっけ? <> 494<>sage<>2008/12/06(土) 19:56:31 ID:kd/tvFHS0<> delegateの優先度はApplication > File's Owner
awakeFromNibの呼び出され順はIBでの順番みたい
とりあえず気にしないことにします

ApplicationのdelegateにClassAをセット
File's OwnerのdelegateにClassBをセット
ClassAのawakeFromNibが呼ばれ
ClassBのawakeFromNibが呼ばれ
ClassAがdelegateになった(AB共にapplicationShouldTerminateAfterLastWindowClosedを実装して確認)

ApplicationのdelegateにClassBをセット
File's OwnerのdelegateにClassAをセット
ClassAのawakeFromNibが呼ばれ
ClassBのawakeFromNibが呼ばれ
ClassBがdelegateになった(AB共にapplicationShouldTerminateAfterLastWindowClosedを実装して確認)

IBのObjectの順序をClassA,ClassB入れ替えたらawakeFromNibの呼び出され順序が入れ替わった <> 名称未設定<><>2008/12/07(日) 14:10:48 ID:q2ACHXTU0<> >>494
MainMenu.xibに限っていうならば、ApplicationとFile's Ownerは、同一のオブジェクトです。
<> 名称未設定<><>2008/12/07(日) 16:03:01 ID:ZU8ZGfPL0<> >>493
返信非常に遅くなり申し訳ございません。
何とかNSViewに貼り付けることで右クリック操作によるコンテキストメニューの
表示に成功させることが出来ました。
ここで気になるのはこれは、レスポンダーチェーンが関わっているのでしょうか?

またそこで今度はNSTableViewで選択行を右クリック→コンテキストメニュー→削除
を実現させようとトライしたのですが、

この際NSTableViewコントローラにmyTableViewを貼り付けました。
右クリックでコンテキストメニューは表示させることができるのですが、
行が選択できません。

データソースは別のモデルmyTableViewDataSourceで用意しています。

myTableViewを貼り付けなければ行が選択できるのですが・・・・
それだと右クリックしたときコンテキストビューを表示させるのに
どうしたらいいのか分からないので・・・・ <> 名称未設定<>sage<>2008/12/07(日) 16:22:26 ID:hZLd1O/h0<> >>498
とりあえず落ち着いて、最終的な目的から書いてくれ。正直何がしたいのかさっぱり分からん。
NSTableView上で右クリックしたらコンテクストメニューを出すようにするには、コードを書く必要は無い。
IBで別にNSMenuを作り、NSTableViewのmenuアウトレットをそれに繋げるだけでいい。

NSTableView上で右クリックしたら、その行を選択した上でコンテクストメニューを出したい場合は、
NSTableViewサブクラスで右クリックしたときの処理を追加する。
- (void)rightMouseDown:(NSEvent *)theEvent {
NSPoint locationInWindow = [theEvent locationInWindow];
NSPoint locationInSelf = [self convertPoint:locationInWindow fromView:nil];
int row = [self rowAtPoint:locationInSelf];
if (row < 0) return;
[self selectRow:row byExtendingSelection:YES];
[super rightMouseDown:theEvent];
}
こんな感じで、右クリックした行を選択範囲に追加する。 <> 名称未設定<><>2008/12/07(日) 16:29:52 ID:ZU8ZGfPL0<> >>499
最終的な目的は選択した行を削除することにあります。

そこでコンテキストメニューの項目で「削除」をクリックすれば
選択されている行を削除しようとがんばっています。

IBでMenuをコネクトすればいいとのことですが、
menuとコントローラを接続できずに断念しました。
<> 名称未設定<><>2008/12/07(日) 16:35:55 ID:ZU8ZGfPL0<> >>499
右クリックしたときに
選択できるようになりました。
これを左クリックしたときに選択できるように自分でやってみます。 <> 名称未設定<><>2008/12/07(日) 16:39:57 ID:ZU8ZGfPL0<> >>499
できました。
ありがとうございます。
<> ネタですよ<>sage<>2008/12/07(日) 20:40:21 ID:GT/IU0+g0<> 質問です。

XMLの解析で
<entry>
 <title>TITLE</title>
 <link rel="REL" type="TYPE" href="HREF"/>
</entry>

の場合、linkのrel,type,hrefの値を取るにはどうすればよろしいでしょうか?
titleの取り方はわかったのですが。
<> 名称未設定<>sage<>2008/12/07(日) 21:31:39 ID:dk74pp3E0<> うは、前にネタ書いた時の名前が残ってるw
すいません、ネタではなく真面目な質問です。
お恥ずかしい限りで・・・ <> 名称未設定<>sage<>2008/12/07(日) 21:35:24 ID:K/k+Z42t0<> >>499
selectRow:byExtendingSelection:はもうダメだべ。

selectRowIndexes:byExtendingSelectionに換えるべ。
<> 名称未設定<>sage<>2008/12/07(日) 21:44:31 ID:vMU1Eyyg0<> どこがネタなんだろうと悩んでしまったじゃないか...w <> 名称未設定<>sage<>2008/12/07(日) 22:37:34 ID:uBxirYjF0<> >>503
>>459の人かw <> 名称未設定<>sage<>2008/12/07(日) 23:08:20 ID:1orqG+Pz0<> >>503
titleはどうやって取り出しましたか? <> 名称未設定<>sage<>2008/12/07(日) 23:13:41 ID:curmvucM0<> >>503
せめて使ってるパーザ位書きなよ。

んで、NSXMLParser使ってるとして
parser:didStartElement:namespaceURI:qualifiedName:attributes:メソッドを
デリゲードで実装すれば、属性が得られる。

- (void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict {

if ([elementName isEqualToString:@"link"]) {
NSLog(@"rel = %@, type = %@, href = %@",
[attributeDict valueForKey:@"rel"],
[attributeDict valueForKey:@"type"],
[attributeDict valueForKey:@"href"]);
}

} <> 名称未設定<>sage<>2008/12/08(月) 03:28:42 ID:U49CM7Oh0<> cocoa事始めで
ボタンクリックで、Hellow Worldウィンドウを出すことすらできない。
どこかで似たようなチュートリアルありませんか? <> 名称未設定<>sage<>2008/12/08(月) 03:48:04 ID:g5ShzTpC0<> Cocoa事始めってどこ? <> 名称未設定<>sage<>2008/12/08(月) 11:18:37 ID:WhRI485B0<> 事始めて→今年初めて

じゃない?
<> 名称未設定<><>2008/12/08(月) 13:01:28 ID:KSfoz0Yz0<> ・・・ <> 名称未設定<>sage<>2008/12/08(月) 13:13:13 ID:6I8yRHaT0<> たのCocoLeopardじゃないか?
あの本最初ボタンクリックでHello World出すところから始まるし。

永遠にHellow Worldウィンドウは出ないと思うけどな。 <> 名称未設定<><>2008/12/08(月) 14:45:57 ID:KSfoz0Yz0<> 揚げ足を取りたくてたまらない私 <> 名称未設定<>sage<>2008/12/08(月) 16:27:55 ID:2m2l4A690<> 意味の無い書き込みは見てて不快
発言するなら書く、そうでないならROMっててください
勘違いなレスを見かけた時もそうです <> 名称未設定<><>2008/12/08(月) 16:31:06 ID:fWhZhvgy0<> そうですね。
>>510さん、ボタンを押すと新たに画面を表示させたいのでしょうか? <> 名称未設定<><>2008/12/08(月) 16:35:36 ID:fWhZhvgy0<> 返事を待つのもだるいので、そうだとして仮定して質問に答えると
まずIBのほうで
NSWindowのVisibleのチェックをはずしてください。

そこで新たにモデルのほうで
IBOutlet NSWindow* newWindow; //こいつはIBで該当Windowと結ぶ

- (IBAction)openWindow:(id)sender
{
[newWindow makeKeyAndOrderFront:self];
}

これで一発ででるはず。
<> 名称未設定<><>2008/12/08(月) 16:39:17 ID:KSfoz0Yz0<> >>516
オマエモナー <> 名称未設定<>sage<>2008/12/08(月) 16:46:07 ID:0OjgUTpN0<> >>519
王道なんだが、ちょっとは自重しろw <> 名称未設定<>sage<>2008/12/08(月) 17:07:19 ID:2m2l4A690<> >>519
私のレスはあなたに対する明確な意志表示があります
あなたとは違うんです <> 名称未設定<>sage<>2008/12/08(月) 18:34:54 ID:WTYb+ld20<> キモチワルイ <> 名称未設定<>sage<>2008/12/08(月) 21:05:02 ID:IzfmZjnO0<> >>508 >>509
ありがとうございます。自己解決できました。
NSXMLParserは使わずに NSXMLNodeのchildrenから取ってくる方法で自作しています。
>>503の場合、簡単に書くとこんな感じです。

NSXMLNode *entryNode = 〜entryノードを取得

// getChildNodeは引数ノードのchildrenからnameが一致するNSXMLNodeを取得する自作
// NSXMLNodeからNSXMLElementにキャストして取得
NSXMLElement *element = (NSXMLElement*)[self getChildNode:entryNode name:@"link"]; attrHref = [[elemLink attributeForName:@"href"] stringValue];
NSString *rel = [[element attributeForName:@"rel"] stringValue];
NSString *type = [[element attributeForName:@"type"] stringValue];
NSString *href = [[element attributeForName:@"href"] stringValue];
NSLog(@"rel=%@, type=%@, href=%@", rel, type, href);

NSXMLNodeからNSXMLElementにキャストって大丈夫なんですかね?
エラーもワーニングも出なかったもので。 <> 名称未設定<>sage<>2008/12/08(月) 21:06:59 ID:IzfmZjnO0<> あ、重ねてすみません。
attrHref = [[elemLink attributeForName:@"href"] stringValue];
はゴミです。 <> 名称未設定<>sage<>2008/12/08(月) 22:36:04 ID:kFKjusSQP<> 初歩的なことかもしれないのですが
日本語が含まれるNSArrayをNSLogで表示させたときに
ユニコード値が出てくるのはどうにもならないのですか?
<> 名称未設定<>sage<>2008/12/08(月) 23:11:41 ID:/HG0hJ4t0<> >>522
お前のレスが一番キモチワルイよw

>>525
過去ログにあるよ <> 名称未設定<>sage<>2008/12/09(火) 12:40:37 ID:7rIjPTyl0<> Safariのダウンロード画面に出てくるインジケータみたいに
後ろに流れて行くようなインジケータバーを表示させたいのですが、
NSIndicatorではその「後ろに流れて行く」表示が設定できませんでした。
なにか他のクラスがあったりするのですか?
それともNSIndicatorの設定の問題でしょうか? <> 名称未設定<>sage<>2008/12/09(火) 12:44:56 ID:c+xotcrO0<> >>527
後ろに流れていくというのがアニメーションのことなら、startAnimation:とstopAnimation:を使う。
Binding使うと自動でやってくれたと思う。 <> 527<>sage<>2008/12/09(火) 13:26:01 ID:7rIjPTyl0<> すいません、NSIndicatorじゃなくてNSProgressIndicatorでした。
やりたいのはdeterminate progress barを増やしつつ、後ろに流れて行く表示なんです。
startAnimationはIndeterminateだけですよね?
Safariのダウンロード表示なんかはそうなっているので、出来なくはないと思っているのですが
どうなのでしょう? <> 名称未設定<>sage<>2008/12/09(火) 13:31:04 ID:c+xotcrO0<> >>529
Determinateなら値が設定されていれば勝手にアニメーションしてると思うけど。
あれ、これ10.5だけなのかな? <> 名称未設定<>sage<>2008/12/09(火) 13:48:59 ID:nhlJuWQy0<> こだわる必要性をさほど感じない部分ではあるな <> 名称未設定<><>2008/12/09(火) 16:04:31 ID:PzccxqHg0<> NSTimerの
scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
メソッドを別のスレッドを建てて、そのスレッドで起動させようとしたら撃沈されました。

上記のメソッドは呼び出されると実行ループに登録してすぐに終了しちゃうんですね。
そのおかげで子スレッドも終了しちゃいます。

まぁわざわざ別スレッド上で起動させる必要もないんですが、
解決策ってありますか?
<> 名称未設定<>sage<>2008/12/09(火) 16:12:27 ID:c+xotcrO0<> >>532
timerWith...のほうで作ってNSRunLoopのmainRunLoopにaddTimer…したら駄目だってリファレンスに書いてあった。 <> 名称未設定<>sage<>2008/12/09(火) 16:16:37 ID:c+xotcrO0<> >>532
ん、ひょっとしてスレッド内でTimerを使うってことかな。なら自分でRunLoop作ればいいよ。 <> 名称未設定<>sage<>2008/12/09(火) 16:21:53 ID:vViia8LOP<> >>526
過去ログ漁って
NSLog(@"%@", [NSString stringWithCString:[[array description] UTF8String] encoding:NSNonLossyASCIIStringEncoding]);
でいけました。 <> 名称未設定<><>2008/12/09(火) 16:23:19 ID:PzccxqHg0<> >>533-534
すばやい回答ありがとうございます。
>>スレッド内でTimerを使うってことかな

子スレッド上でTimerを使おうと画策しました。
ただこいつは時期が来るまで眠っていてくれるから
そんな必要性はほとんどないんですけどね。

自分でRunLoopを作ってそこに登録せよってことでしょうか? <> 名称未設定<>sage<>2008/12/09(火) 16:31:44 ID:c+xotcrO0<> >>536
うん。そもそもscheduledTimerなんちゃらって、Timer作ってカレントのRunLoopに登録するものだから。
でもTimer使うためだけにRunLoop回すくらいなら、NSThreadでsleepUntilDateすればいいんじゃないかな。 <> 名称未設定<><>2008/12/09(火) 16:37:27 ID:PzccxqHg0<> >>537
なるほど休眠させるという手もありますね。
実はその辺悩ましいところなんです。
ただプログラムは同じ動作が得られるなら簡単な方でという原則に従うなら
まちがいなく休眠させておいたほうがいいですよね。

わざわざ実行ループをみずから作成するよりは・・・・・・
<> 名称未設定<>sage<>2008/12/09(火) 16:48:19 ID:nhlJuWQy0<> むしろスレッド内でNSTimerを使う意味は何も無い気がする。 <> 名称未設定<><>2008/12/09(火) 16:54:39 ID:PzccxqHg0<> 自分が作成しているのはシュミレーションモデルなんですよね。

だから
その部分はメインと切り離して、動作させないとモデルに忠実にならないっていうジレンマがあるんです。

ただプログラム内部でそんなことをする必要性があるのかっていうと
僕には分からないです。
ありますかね?一応大学の卒論なんですが・・・・教授に相談するべきなんでしょうか? <> 名称未設定<>sage<>2008/12/09(火) 17:01:26 ID:7aJT8/WT0<> 卒論でCocoaで提出していいのか...羨ましいな。 <> 名称未設定<><>2008/12/09(火) 17:02:00 ID:PzccxqHg0<> そんなわけがない・・・・・。 <> 名称未設定<>sage<>2008/12/09(火) 17:11:39 ID:+/JU880n0<> setUsesThreadedAnimation:
じゃダメなの? <> 名称未設定<>sage<>2008/12/09(火) 23:23:18 ID:JuNa1S6u0<> Cocoaで
「マウスカーソルを任意の座標に持って行き」
「そこで右クリックする」
ということをソフトウェアからコントロールすることは可能でしょうか?
NSEvent あたりのリファレンスを調べましたが,それらしいメソッドが見つかりませんでした。

Leopard の Automator で「操作の記録」をして再生すると,このようなマウスイベントの再現ができているので,
方法がないわけではないと思うのですが…。Automator はどうやって実現しているのでしょうか…。

<> 名称未設定<>sage<>2008/12/09(火) 23:27:09 ID:yHQ0Sslf0<> >>540
>>541,542を見て「え、だめなんですか」とか言う前に
学校で使っているパソコンのOSがMacOS Xであることを確認しといて。
それ以外だったらだめ。 <> 名称未設定<>sage<>2008/12/09(火) 23:59:55 ID:ESJXlCz60<> それ以外でもだめなことないだろ。
プレゼンできればいいし、プログラムそのものを提出するんじゃなくてそれについての卒論でしょうよ。 <> 名称未設定<>sage<>2008/12/10(水) 00:33:46 ID:2N5XkSrD0<> >>544
プログラムで「自動的に」
マウスを任意の位置まで持って行き右クリックさせるプログラムを作ろうとしているのですか?

イベント処理はNSResponderで定義されているとか・・・そんなことは聞いてないんですよね。?
<> 名称未設定<>sage<>2008/12/10(水) 00:51:56 ID:xSuG9smw0<> まさか>>544>>492,498と同一人物じゃあるまいな。 <> 名称未設定<>sage<>2008/12/10(水) 01:00:06 ID:2N5XkSrD0<> >>492,498は>>547です・・・・・私です。

えーそれならって思って・・・ <> 548<>sage<>2008/12/10(水) 01:22:42 ID:6aI1OQjr0<> >>549
目的は>>500なんでしょ?
もはややり方が回りくどすぎて意味不明になってるよ。
世の中のCocoaアプリがコンテクストメニュー一つ出すのにそんな回りくどいコード書いてるわけないのは分かるでしょ。
だったら方法が間違ってることも分かるでしょ。
そこで方法を質問しないで、自分が考えたトンデモ解決法を実現しようとして、その過程で行き詰まって質問したところで
まともなアプリは出来ないよ。 <> 548<>sage<>2008/12/10(水) 01:27:21 ID:6aI1OQjr0<> んで>>500ね。
menuとコントローラを繋げない…とあるけどコントローラにはすでに削除の処理を実装したアクションメソッドがあるのね?
ならNSMenuItemからコントローラにアクションを繋げればいいよ。コントロールキー押しながらドラッグね。 <> 名称未設定<>sage<>2008/12/10(水) 01:29:26 ID:3bh9sFCU0<> >>544

void rightClicOn(CGPoint mouseLocationFromTopLeft)
{
CGWarpMouseCursorPosition(mouseLocationFromTopLeft);
CGPostMouseEvent(mouseLocationFromTopLeft, true, 2, false, true);
CGPostMouseEvent(mouseLocationFromTopLeft, true, 2, false, false);
}

こんなんで逝けるハズ・・・。 <> 名称未設定<>sage<>2008/12/10(水) 01:30:35 ID:3bh9sFCU0<> うはっ、関数名の綴り間違ってる。 <> 名称未設定<>sage<>2008/12/10(水) 01:34:01 ID:2N5XkSrD0<> >>550
勘違いされています。
544さんは私ではありません。

自分もイベント処理で苦しんだので、もしかて544さんも
同じように右クリックしたいのかなと思っただけです。



<> 名称未設定<>sage<>2008/12/10(水) 01:39:47 ID:2N5XkSrD0<> 参考にと今見させていただいたんですが、

QuartzのAPIですか・・・・
どうやったらそんな所まで扱えるようになるんですか?
cocoaでアップアップです。 <> 名称未設定<>sage<>2008/12/10(水) 01:42:40 ID:u8v8vRLL0<> >>552
なんでCocoaは左下でCoreGrapchics?は左上なんだろ。統一してくれりゃいいのに。
変換関数とかってあるのかな? <> 名称未設定<>sage<>2008/12/10(水) 03:00:28 ID:fRwjglTW0<> ビットマップ画像扱う場合必然的にCoreGraphics使う事になるよ <> 544<>sage<>2008/12/10(水) 05:18:06 ID:0LtvEto10<> >>552
ありがとうございます!

ID:2N5XkSrD0 さんの質問内容と似ていたために,混乱させてしまった人がいたようですみません。
私がやりたかったのは,AppleScript からの右クリックなのですが,これで可能になりました。
AppleScript では,tell application "System Events" で,キーストロークや左クリックのイベントは送信できるのですが,
右クリックだけは手段が用意されておらず,control + 左クリック を送信しても再現できずに困っていたのです。

CGPostMouseEvent() を呼び出すコマンドラインツールを作成し,
それを AppleScript から do shell script で呼び出すことで,AppleScript からの右クリックが可能になりました。
これで,右クリックからしか呼び出せないアプリの機能を使用する,アプリ操作自動化スクリプトが作れそうです。 <> 名称未設定<>sage<>2008/12/10(水) 05:42:45 ID:GLeH1aY40<> つうかそもそもコンテクストメニューからしか呼び出せないコマンドを持った
アプリなんてそんなにないんじゃ... <> 名称未設定<>sage<>2008/12/10(水) 09:16:15 ID:4cshTNqV0<> >>540
とりあえず、趣味レーションじゃなくて、シミュレーション、な。 <> 名称未設定<>sage<>2008/12/10(水) 09:50:33 ID:lt7oGnOb0<> >>558
>CGPostMouseEvent() を呼び出すコマンドラインツールを作成し,
>それを AppleScript から do shell script で呼び出すことで,AppleScript からの右クリックが可能になりました。

これってなんか面白いプロセス間通信じゃない?
もしかしてマウスイベントってこうやって外のプロセスから勝手に発生できる?
ログインしているユーザと同じユーザIDである必要はあるのかな。 <> 名称未設定<>sage<>2008/12/10(水) 10:10:37 ID:0LtvEto10<> >>559
それが,あるのですよ…。
具体的には,Safari に SafariStand を組み込んだときにコンテクストメニューに現れる,「PDF形式で書き出し...」というコマンドです。
「PDF形式で書き出し...」は,メニューバーのメニュー項目には一切現れず,コンテクストメニューにしか現れません。

AppleScriptからPDF化を行うには,
http://www1.odn.ne.jp/~cge02410/backnumber/2008/05/09024005.html
のようなCUPS-PDFを使う方法もありますが,この方法だと,A4用紙サイズの場所でページ分割された,マルチページのPDFが生成されます。
それに対し,SafariStand の「PDF形式で書き出し...」コマンドで生成されるPDFは,ページ全体が1ページになった,縦長のPDFです。

印刷が目的でなく,iPhone画面上での閲覧が目的のPDFの場合,ページごとに切られるよりも,
HTMLのようにページの概念なしで縦長に繋がっていた方が便利なので,
この「PDF形式で書き出し...」をAppleScriptから使いたくて,「ソフトウェアから右クリックするには?」という疑問に至ったわけです。

それとも,自分で PDFKit を扱ってどうにかなるものでしょうか? <> 名称未設定<>sage<>2008/12/10(水) 10:19:21 ID:tqbTqlML0<> >>559
iTunesにはコンテクストメニューからしか呼べないコマンドかなりあるぞ。 <> 名称未設定<>sage<>2008/12/10(水) 11:36:17 ID:3bh9sFCU0<> >>556
描画環境については原点左下で統一されてます。
>>552はデバイス上での座標です。ややこしいですな。

それよりも、CocoaとCoreGraphicsとで
微妙に挙動が違うとか、マジ勘弁。 <> 548<>sage<>2008/12/10(水) 14:27:13 ID:xSuG9smw0<> >>562
Coral使えばいいじゃん。
http://hmdt.jp/coral/index.html <> 名称未設定<>sage<>2008/12/10(水) 21:34:47 ID:0FGfVHqN0<> 荻原剛志さんの『詳解 Objective-C 2.0』を購入したのですが、
手元にある同じ荻原さんの『Objective-C Mac OS X プログラミング』は
処分してしまっても大丈夫ですか? <> 名称未設定<>sage<>2008/12/10(水) 23:14:04 ID:fRwjglTW0<> 好きにするがよろし <> 名称未設定<>sage<>2008/12/10(水) 23:58:21 ID:zWsFgxMm0<> >>558
AppleScriptでdo shell scriptするならNSTask使えば良くね?
てかコマンドラインツール作らなくてもCGPostMouseEvent()って普通にカーボン?ならそのままコード書けば良くね?
と思った。
あんまちゃんと読んでないんで的外れだったらスマソ。 <> 名称未設定<>sage<>2008/12/11(木) 09:37:47 ID:SLO1lTjD0<> >>566
新しい奴では分散オブジェクトのとことか前のものから省略されてる部分が
あるけど、それでもいいなら捨てればよろし。 <> 名称未設定<>sage<>2008/12/11(木) 10:21:22 ID:LfDuzN4X0<> >>565
そんな便利なものがあったとは……!

>>568
いえ,そういうことではなくて,元々AppleScriptがメインで,AppleScriptで色んなアプリを自動操作しているスクリプト中において,
右クリックを自動化したい場合に,do shell script で CGPostMouseEvent() を呼び出すコマンドラインツールを呼び出す,という話です。
<> 名称未設定<>sage<>2008/12/11(木) 10:37:08 ID:ZEYSuhvK0<> >>570
AppleScriptがメインなわけね
>>544でCocoaでって書いてあるから勘違いした <> 名称未設定<>sage<>2008/12/11(木) 11:54:56 ID:LfDuzN4X0<> >>571
勘違いさせてしまってすみません。
Cocoaで実現可能な機能であれば,
http://pc11.2ch.net/test/read.cgi/mac/1223026902/171
のように AppleScript から RubyCocoa 経由で呼び出せるので,そういう方法はないかと模索していたわけです。

今回の右クリックも,

require 'osx/cocoa'
OSX.require_framework '/System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework'
pos=[10,40]
OSX::CGPostMouseEvent(pos, true, 2, false, true)
OSX::CGPostMouseEvent(pos, true, 2, false, false)

というRubyスクリプトをワンライナーで do shell script から走らせることによって可能ではありました。
しかし,このRubyスクリプトを走らせた後,最初に Finder 上でファイルをドラッグしたときに,
ドラッグが離せなくなるという謎めいた現象が起こりました。
ファインダー上で一度手動で右クリックすれば解消するのですが。

どうも,この現象はRubyCocoaのバグなのかと思われます。

仕方がないので,コマンドラインツールを作ってAppleScriptから呼び出す方法をとったわけです。 <> 566<>sage<>2008/12/11(木) 20:15:07 ID:aKreviH/0<> >>569
ありがとうございます。
自分で判断がつくまではおいておくことにします。 <> 名称未設定<>sage<>2008/12/12(金) 03:44:47 ID:IpphkAOm0<> Objective-C / Cocoaで、
http://mac.hitobashira.org/up/src/maka0123.png
このように、非同期の処理が終わる間、呼び出し元のメソッドAを待機させたいのですが、
方法はあるのでしょうか… <> 名称未設定<>sage<>2008/12/12(金) 10:26:53 ID:Vt9WDSMO0<> performSelectorOnMainThread:withObject:waitUntilDone:を使う。 <> 名称未設定<>sage<>2008/12/12(金) 10:36:04 ID:jo4yNZOw0<> >>574
メソッドの実行に同期・非同期はあるけど(分散オブジェクトかマルチスレッド(>>575)の場合)
メソッドが他の処理をトリガーして、その処理が非同期の場合はもちろん方法はない。

クラスによっては、同期処理と非同期処理のメソッドを分けているものもある。NSURLConnectionの
sendSynchronousRequest:returningResponse:error:と
connectionWithRequest:delegate:のように。
だから実際に何をやりたいのか書くと調べられるかも。 <> 名称未設定<>sage<>2008/12/12(金) 11:20:55 ID:Lqy+6jQB0<> メソッドを分けたり条件式を足したりすることで実現できそうだけどなぁ
引数の問題はあるけど例えばメソッドAを分けたり、
待機の部分をなんらかのループにしておいて別スレッドのやつにループを抜ける条件を成立させたり
まぁ後者はうまいことやらないとループの間パワー使いまくるからアレだけど
(false)でスレッドをスリープさせて起きたらgotoとかで戻ってまた条件式をチェックして
(true)なら以降の処理へ、とかだったらいけるんじゃない?
で、やはり>>576さんの言う通り、もうちょっと具体的な話しがないとみんな答えにくいと思う <> 名称未設定<>sage<>2008/12/12(金) 11:31:37 ID:vTLMpfhJ0<> >>577
それってフツーに条件付きロックじゃないの? <> 名称未設定<>sage<>2008/12/13(土) 03:04:23 ID:pWDzXHA/0<> >>575-578
ありがとうございます。

>>576
具体的に書いた方が良かったですね、すみませんorz
WebViewにもそういうのがあったら…

>>577
その手があったか…
確かに負荷が心配ですね。
[NSThread sleepUntilDate:]を使って、0.1秒ごとにしたら大丈夫かな//

具体的には、NSTableViewのデリゲートの
- (void)tableView:(NSTableView *)tableView
willDisplayCell:(id)cell
forTableColumn:(NSTableColumn *)tableColumn
row:(int)row{} (図:メソッドA部分)
から、[webView setMainFrameURL:](図:メソッドB部分)を呼び出し、
webViewから非同期で呼び出された、
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame{}(図:メソッドC部分)
で、WebViewの表示結果に応じた画像がセットされるまで、- (void)tableView:(NSTableView *)tableView willDisp(略を待機させて置くようなことを考えています。

- (void)tableView:(NSTableView *)tableView
willDisplayCell:(id)cell
forTableColumn:(NSTableColumn *)tableColumn
row:(int)row{}
のメソッドが終了してしまった後だと、[cell setImage:]を行っても表示に反映されないみたいで…
<> 名称未設定<>sage<>2008/12/13(土) 05:21:59 ID:n2oMHeo80<> >>579
>確かに負荷が心配ですね。

うーん、リアルで条件付きロックを知らないのか? じゃあちょっとコードを書いてみる。

実は pthread しか使ったことがなかったのだが、インターネットのヤホーで検索したら
ココアにはコソディショソロックというのがあることを発見したのでちょっと調べてみました。
初めて使うので間違ってたらごめんね。
なお、ココアのUIまわりは基本、スレッドセーフじゃないみたいなので、それは別途注意。

うーん、でもなんかちょっと違う気がする。まあいいや。 <> 名称未設定<>sage<>2008/12/13(土) 05:24:03 ID:n2oMHeo80<> 改行が多いと言われるので、ほんとは一個のファイルなんだけど分けます。

#import <Cocoa/Cocoa.h>

NSConditionLock *lock = nil;
const int OK = 1, NG = 0;

@interface Hoge : NSObject {
}
- (void)methodB;
- (void)methodC;
@end

@implementation Hoge
- (void)methodB {
NSLog(@"methodB begin");
[NSThread detachNewThreadSelector:@selector(methodC) toTarget:self withObject:nil];
NSLog(@"methodB end");
}

- (void)methodC {
NSLog(@"methodC begin");
[lock lock];
NSLog(@"sleeping in methodC for 10 seconds:");
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:10]];
[lock unlockWithCondition:OK];
NSLog(@"methodC end");
}
@end <> 名称未設定<>sage<>2008/12/13(土) 05:25:39 ID:n2oMHeo80<> int main(void)
{
lock = [[NSConditionLock alloc] initWithCondition:NG];
Hoge *hoge = [[Hoge alloc] init];
[hoge methodB];

NSLog(@"before barrier");
[lock lockWhenCondition:OK];
NSLog(@"after barrier");
exit (0);
}

コンパイルは cc -fobjc-gc -framework Ccocoa でよろしく。 <> 名称未設定<>sage<>2008/12/13(土) 05:59:47 ID:pWDzXHA/0<> >>580-582
ありがとうございますm(_ _)m
こんな便利なのがあったんですか…、助かりました。 <> 名称未設定<>sage<>2008/12/13(土) 10:32:27 ID:JcdjU/On0<> >>579
もしかしてtableView:willDisplayCell:forTableColumn:row:で指定されたNSCellをそのまま保持して、
後で画像を設定しようとしたのではないですか?
NSTableViewのCellはしょっちゅうコピーされるので、このメソッドで渡されたCellと実際に表示に使われるCellが
同じインスタンスとは限らないんです。

私だったら、そもそもそういう戦略をとりません。NSImageをインスタンス変数に持つモデルを作成し、
それを格納したNSArrayをNSTableViewにBindingします。
webView:didFinishLoadForFrame:が呼ばれたら該当するモデルのNSImageをsetしてやれば自動で表示も変わります。

表示が必要な部分だけ読み込みを行いたいならば、この場合もtableView:willDisplayCell:forTableColumn:row:を
受け取って該当するモデルのみ読み込ませる必要はあるかと思いますけどね。
WebVIewの読み込みが極端に遅かったりした場合にフリーズ同然の状態になるようでは使ってられません。 <> 名称未設定<>sage<>2008/12/13(土) 22:29:36 ID:grgosdrm0<> メモリーリークーを静的解析するツールはないのでしょうか?
メモリーリークーだけまともにできない静的解析ツールならあるらしいのですが <> 名称未設定<>sage<>2008/12/14(日) 00:05:13 ID:mgsCXS5c0<> >>585
解析しなくてもコード書くときに気づけ <> 名称未設定<>sage<>2008/12/14(日) 00:39:03 ID:u82y2nJj0<> >>585
http://clang.llvm.org/StaticAnalysis.html

使ったこと無いので、詳細不明。
エロイ人のレポ期待。 <> 名称未設定<>sage<>2008/12/14(日) 02:03:29 ID:0NmjHAe60<> >>579
NSTableViewの行に指定したURLから取ってきた画像を表示させたいのですかね?
でしたら、>>584で指摘されているやり方でWebViewを使わずに、NSURLConnectionで
非同期にデータを取得してNSImageを作成することもできます。

NSURLConnection (非同期) [1]
http://www.geekpage.jp/programming/macosX-network/NSURLConnection-async-1.php


<> 名称未設定<>sage<>2008/12/14(日) 02:16:02 ID:Q/f3QCtB0<> >>584
Cellではなく、TableViewにbindingですか…、なるほど。

>>588
画像そのものでしたら、それで良いのですが、
WebViewで表示したhtmlのスクリーンショット(dataWithPDFInsideRect)を表示させたいと考えています。 <> 名称未設定<>sage<>2008/12/14(日) 16:33:29 ID:SOBNa9070<> 知り合いのソースコード見てたら
NSLogデバッグで告白文が書かれていて笑ってしまった。

<> 名称未設定<>sage<>2008/12/14(日) 17:07:31 ID:NC7/Gvub0<> >>590
で、付き合うの?付き合わないの?
え?違うって? <> 名称未設定<>sage<>2008/12/14(日) 20:02:42 ID:x0LVuiPM0<> ウホッ <> 名称未設定<>sage<>2008/12/14(日) 20:14:24 ID:wBq7QeXL0<> >>585
チャラララン♪

ドラえもん「メモリーリークー」
<> 名称未設定<>sage<>2008/12/14(日) 22:18:14 ID:EMo+k0m90<> よく見ておくがいい、プログラマが告白(confess)をするというのは、こういうことだ!


NSLog(@"Error at %s line %d", __FILE__, __LINE___);


笑っていただけたでしょうか。 <> 名称未設定<>sage<>2008/12/14(日) 22:27:05 ID:E2vidIer0<> UNIX板でその手のスレッドがいつもそれなりの頻度で立ってるな。
確認してないけどクリスマスに向けてまた立ったんじゃないかな?w <> 名称未設定<>sage<>2008/12/14(日) 23:16:25 ID:nL5ZmCvA0<> >>595
クリスマス前はビンビンだな <> 名称未設定<><>2008/12/14(日) 23:56:48 ID:vUlSNKMI0<> たのココ読んで頑張っています。
質問させてください。

Xcode起動して CocoaApplication を新規プロジェクトで作成して、
すぐにビルドして実行しても以下のエラーが発生してしまいます。

CopyStringsFile /Users/hoge/Desktop/work/TestCocoa/build/Debug/TestCocoa.app/Contents/Resources/English.lproj/InfoPlist.strings English.lproj/InfoPlist.strings
error: can't exec '/Developer/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/copystrings' (No such file or directory)
Command /Developer/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/copystrings failed with exit code 71

どのように解決していけばよいでしょうか?
宜しければ教えてください。 <> 名称未設定<><>2008/12/14(日) 23:58:00 ID:U9Ih6wbO0<>           ___
        /_ノ ::::ヽ、_\
 ミ ミ ミ  o゚<●>:::::::<●>゚o      ミ ミ ミ
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒) マカがwwww
| / / /     |r┬-|    | (⌒)/ / / // 
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/
|     ノ     | |  |   \  /  )  /
ヽ    /     `ー'´      ヽ /    /
 |    |   l||l 从人 l||l      l||l 从人 l||l
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))
<> 名称未設定<>sage<>2008/12/15(月) 00:08:18 ID:ONvQ5Bfu0<> >>597
IBはどこもいじってないわけだよね?

後、たのココのどの部分を読んでいるのかとか、Xコードのバージョンとかも書いてもらえないですか?
もしかしたら再度インストールしたほうがいいかもしれない。 <> 名称未設定<>sage<>2008/12/15(月) 00:14:06 ID:ONvQ5Bfu0<> >>597
検索で
/Developer/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/copystrings

そしたらあなたと同じように最初にビルドした際にこんなエラーが出たって言う悩みがいっぱい出てあったよ。

<> 名称未設定<><>2008/12/15(月) 00:17:52 ID:YWho2ACc0<> レスありがとうございます。

IBは思い当たるような設定変更はしていません。
ただ、気になるのは以前にiPhoneのSDKをインストールしているので、
デフォルトとは言い切れません。

たのココはRSS Readerのサンプルを作っています。
本に載っていたサンプルコードを一気に書き上げて、
ビルドしたら上記のエラーが発生しました。

おかしいな、と思って切り分けのために
全く新規に空のプロジェクトを作って見ても同じエラーが
発生したので、異常を感じて調べていたところです。

バージョンは3.1.1 です
コンポーネントのバージョン
Xcode IDE: 1115.0
Xcode Core: 1114.0
ToolSupport: 1102.0 <> 名称未設定<>sage<>2008/12/15(月) 00:19:36 ID:i+oeVcfk0<> そうですか。とりあえず、自分でも調べるけど、
2ちゃんねるに投げておけば、誰かが調べてくれる。ということで
書いていたんですね。 <> 名称未設定<>sage<>2008/12/15(月) 00:19:37 ID:ONvQ5Bfu0<> >>597
全く同じ質問がされている。
http://www.mailinglistarchive.com/xcode-users@lists.apple.com/msg13520.html

2番目の回答ではインストールし直せとかかいてあるけど、
一度全部読んでみて。 <> 名称未設定<><>2008/12/15(月) 00:20:24 ID:YWho2ACc0<> >>600
ありがとうございます。
copystrings などで検索してたので上手く引っかけれてませんでした。
しばらく読んでみます。 <> 名称未設定<><>2008/12/15(月) 00:28:26 ID:YWho2ACc0<> 完全に私の検索スキルの低さが原因だったようです。
あっという間に解決しました。

簡単に説明しますとエラーが発生している copystrings でrubyが
使用されているのですがそのパスが /usr/bin/ruby 固定でした。
私は macports でrubyをインストールしていたので パスが違うのが
原因でした。

シンボリックリンクを /usr/bin/ruby において解決です。

なんだか皆さんの気分を害されたら申し訳ないです。 <> 名称未設定<>sage<>2008/12/15(月) 00:37:34 ID:ONvQ5Bfu0<> >>605
http://www.digitalsanctum.com/2008/10/04/xcode-cant-exec-developerlibraryxcodeplug-inscorebuildtasksxcplugincontentsresourcescopystrings-no-such-file-or-directory/

上記のサイトですね。
最初コレを見つけたんですけど、rubyなんて使ってないだろうと思って・・
解決してよかったです。 <> 名称未設定<>sage<>2008/12/15(月) 00:39:00 ID:uX3YJL520<> macports って ruby をいれると /usr/bin/ruby が削除されるの?
そんな無茶苦茶な。 <> 名称未設定<>sage<>2008/12/15(月) 00:47:22 ID:aU8GlMMf0<> 世の中にはPATH環境変数ってのがあってだなry)
<> 名称未設定<>sage<>2008/12/15(月) 01:21:01 ID:uX3YJL520<> う〜ん、でも、copystrings のスクリプトの先頭は #!/usr/bin/ruby に
なっているので、PATH 環境変数の問題では無い気が...
わかってなくてすみません。 <> 名称未設定<>sage<>2008/12/15(月) 01:28:54 ID:qsoULL6B0<> この場合、PATHは関係ないね。
それよりも、/usr/bin/rubyが無いのが異常に気になる。
macportsの所為では無いと思うんだけど・・・。 <> 名称未設定<>sage<>2008/12/15(月) 19:04:22 ID:CwNz3R3E0<> MacPorts で Ruby 入れる

$PATHの関係で /usr/bin 以下のRubyが起動される

むきー

sudo rm /usr/bin/ruby

と予測 <> 名称未設定<><>2008/12/16(火) 13:40:23 ID:ZJJ0pZ8kO<> >>612
オヤスミ…
  <⌒/ヽ-、___
/<_/____/
 ̄ ̄ ̄ ̄ ̄ ̄ ̄
<> 名称未設定<>sage<>2008/12/18(木) 03:55:29 ID:5NHEEkjy0<> x-codeで
printf("\n")で改行させたいんですが、どうすればいいですか?

一応エンコーディングはshift_jissでコトエリで バックスラッシュを¥になるように設定しています。

バックスラッシュ+n では改行できるんですよね・・・・・・。
<> 名称未設定<>sage<>2008/12/18(木) 05:52:12 ID:8C6l/M/x0<> バックスラッシュと円記号の関係を再認識したほうがいいと思うな...
あくまで C の規格的には、バックスラッシュ+n が改行。
Shift-JIS でそれが円記号+n に見えるのは、
Shift-JIS ではバックスラッシュの「値」をもつ記号が
円記号のように「表示される」というきまり。
日本語ウィンドウズだとパス名に円記号がいっぱいはいってるけど、
英語ウィンドウズだとそれが全部バックスラッシュになります。

しかしユニコードではバックスラッシュと円記号はちがう文字です。
日本語 Mac で昔標準だった MacJapanese もバックスラッシュと
円記号はちがう文字です。というわけで、悪い事は言わないから
バックスラッシュと円記号を混同するのはやめたほうがいいです。

まあでも確かに XCode で Shift-JIS を選んでもバックスラッシュが
円記号に見えないのはなんか変な気がしますね <> 名称未設定<>sage<>2008/12/18(木) 10:04:04 ID:gsSyM0EO0<> Cocoaでprintfなんぞ使った事は無いが。 <> 名称未設定<>sage<>2008/12/18(木) 11:04:36 ID:LQ3bq09a0<> >>614
>まあでも確かに XCode で Shift-JIS を選んでもバックスラッシュが
>円記号に見えないのはなんか変な気がしますね

え? 円記号に見えるでしょ。
もしかして CP932 (日本語 (Windows, DOS)) と勘違いしてない?

>バックスラッシュと円記号の関係を再認識したほうがいいと思うな... <> 名称未設定<><>2008/12/18(木) 14:17:49 ID:brBSoHTs0<> >>614
ものすごく参考になりました。
その辺、ちょっと調べてみます。
ただwikiをみると何のことかさっぱりで・・・:・・。 <> 名称未設定<>sage<>2008/12/18(木) 15:01:53 ID:HPiuHPLV0<> >>617
OS 9時代、7ビットASCIIの一部は表示文字を各国が自由に指定できた。
バックスラッシュがその一例で、日本のフォントやPCメーカーは
バックスラッシュの代わりによく使う円マークを表示するように設計した。
データ的にはバックスラッシュと同じなんで¥nでも問題がなかった。

OS XになってからはUnicodeを使うようになった。
こいつはバックスラッシュと半角円が別々に定義された。
ゆえにデータ的に見ても別物だから¥nは使えなくなった。


こんな感じでおk? <> 名称未設定<>sage<>2008/12/18(木) 19:12:09 ID:PDgvlNo80<> OS 9時代と表現に違和感が。
つーか、MacJapaneseではちゃんと区別してたよ。 <> 名称未設定<><>2008/12/18(木) 21:38:28 ID:brBSoHTs0<> >>618
本当にありがとうございます。
wikiしかりいろんなサイトを見回ってunicode等調べたのですが、
なかなかバックスラッシュが使えたり、使えなかったり
¥マークが制御文字になったりならなかったりする理由を見つけることができませんでした。

でもおかげさまで明確に理由がわかりました。ありがとうございます!
<> 名称未設定<>sage<>2008/12/18(木) 22:46:09 ID:8C6l/M/x0<> >>616
XCode 3.1.2 で Shift-JIS (Windows, DOS でなくて) にしても
円記号にみえないよ... むむむ。 <> 名称未設定<>sage<>2008/12/18(木) 22:52:14 ID:pOmvbV3i0<> つまり日本が悪いってことだね? <> 名称未設定<>sage<>2008/12/19(金) 00:16:59 ID:kZ9hkPkf0<> >>621
MacにMSゴシックやメイリオを入れても円マークはバックスラッシュになっちゃうんだよね。 <> 名称未設定<>sage<>2008/12/19(金) 01:29:19 ID:dr8c9lPo0<> 0x5Cの字形がバックスラッシュか円記号かはフォント依存の問題。
Unicodeではバックスラッシュ(U+005C)と円記号(0+00A5)は別。 <> 名称未設定<>sage<>2008/12/19(金) 01:58:06 ID:5xiiw0t00<> >>613
option+\でよい? <> 名称未設定<>sage<>2008/12/19(金) 02:05:22 ID:piXJ3bSu0<> >>624
>0x5Cの字形が
フォントのグリフを語る際に、
文字コードを指定せずに 0x5C の字形が、っていっても意味がなくない?
ユニコードでひとつコードを決めると、
グリフは(芸術性をのぞいて)決まってるべきだけど。
あと、シフトJIS の規格って、よく知らないんですが、
各コードのグリフ形状まで指定してないんですか?
指定してるとすると、 0x5C をシフトJIS で表示するときは、
どんなフォントをつかってるにしても、グリフはバックスラッシュでなくて
円記号のグリフを使うべきだと思うんだけど。 <> 名称未設定<>sage<>2008/12/19(金) 05:28:58 ID:PqTjwco00<> >>621
1. 0x5cを含むファイルを作成。
2. Xcode の環境設定でフォントのデフォルトを全てMonaco、エンコーディングのデフォルトを
「日本語(Shift JIS)」にする。
3. Xcode の「開く...」で1.で作ったファイルを開く。

で、円記号が見えるけどな、自分とこでは。

>>623
Vistaから(ピー)してきたメイリオではU+005Cを円記号で表示するけど。自分のとこでは。
MSゴシックは確かMacのOfficeに付いてくるのとWindows純正ので違ったような気が。 <> 名称未設定<>sage<>2008/12/19(金) 15:06:35 ID:lttihNqB0<> >>626
そもそも1Bbyteコードって
シフトJISの定義域ではない。

シフトJISを使用するときに
1Byteコード領域は概ねJIS X0201を使う事が多いだけ。

X0201には標準字形は定義されているが
ビットマップ時代の制定だから、グリフの概念がない。
大体、漢字を16Dotで表現するのにグリフなんて考えすらないよ。 <> 名称未設定<>sage<>2008/12/19(金) 16:43:35 ID:i3qBricn0<> NSString→NSStringへの文字コード変換ってどうんな感じでやればいいんでしょうか… <> 名称未設定<>sage<>2008/12/19(金) 16:48:36 ID:HMXc5t5u0<> >>626
純粋な Shift JIS じゃなくて、Windows 上の Shift JIS の実装(拡張)、いわゆる CP932 だと
話はある意味 >>624 の言う通りで、
0x5c は論理的には reverse solidus (バックスラッシュ)。なんだけど対応する文字(グリフ)は
日本語の Windows 上では円記号で表示される(ことが多い)。

確かに「文字コードとグリフのデザインは別の概念」とはいえ、なんだかなあと思ってしまう。
歴史的な互換性の維持とはいえ。
http://www.microsoft.com/globaldev/reference/dbcs/932.mspx

Mac OS X 上だと CP932 の 0x5c はバックスラッシュのグリフで表示されて(ことが多い)、
こっちの方が純粋というか素直なような。 <> 名称未設定<>sage<>2008/12/19(金) 17:37:33 ID:1nt96Eco0<> >>629
NSString は(実装はともかくとして)
常に Unicode で文字列を格納していると思うべきです。
そこから char* として取り出すときに encoding を指定して取り出す、
そこに char* からデータをいれるときに encoding を指定して入れる。
+[NSString stringWithCString: encoding:]

-[NSString cStringUsingEncoding:]
を参照。
<> 629<>sage<>2008/12/19(金) 17:45:58 ID:i3qBricn0<> ふんふん。
やっぱ、間に一発C文字列への変換が必要という事か…
ほいでまたNSStringに戻すと。 <> 名称未設定<>sage<>2008/12/19(金) 18:57:29 ID:AFDCyKKm0<> >>632
> やっぱ、間に一発C文字列への変換が必要という事か…
> ほいでまたNSStringに戻すと。

ようするに、NSStringからNSStringへの文字コード変換は、無意味という事なのだが。
629はその辺、分かってるのかな? <> 名称未設定<>sage<>2008/12/19(金) 19:01:52 ID:Mt5zlTWV0<> 多分
>そこに char* からデータをいれるときに encoding を指定して入れる。
で指定したエンコーディングになると思ってるんだろう。
俺もわかってないんだが要するにcStringUsingEncoding:
でC文字列が何でエンコードされているかを判断するってことだろ? <> 名称未設定<><>2008/12/19(金) 19:04:52 ID:VujcLHpJP<> なんか勘違いしてる…

NSStringに入れた時点で内部的にはUnicodeに統一される

だからNSStringとして操作する上では、
char型に取り出したり、ファイルと入出力するような場面以外に
文字コードを意識することはないし、
NSString間の文字コード変換ってのもできない(ありえない)よ <> 名称未設定<>sage<>2008/12/19(金) 19:23:42 ID:Mt5zlTWV0<> そういうならまずはcStringUsingEncoding:の正しい使い方から教えてくれや <> 名称未設定<>sage<>2008/12/19(金) 20:27:22 ID:wF57mWA70<> ドキュメント読め。
何のためのドキュメントなんだ。

http://developer.apple.com/documentation/CoreFoundation/Conceptual/CFStrings/introCFStrings.html
http://developer.apple.com/documentation/Cocoa/Conceptual/Strings/introStrings.html <> 名称未設定<>sage<>2008/12/20(土) 00:46:03 ID:Niwi5dnC0<> Objective-Cってもっとシンプルに書けるようにならないかな
Dictionaryも dic[key] = value; とか書ければなぁ
KVCの場合は若干気持ち悪いかもしれん
C++でWrapしてみるか... <> 名称未設定<>sage<>2008/12/20(土) 01:57:12 ID:eDv0h37G0<> >>638
C++だったら連想配列といわず、行列の積なんかもシンプルに書けるよね。C++万歳!

そのぶん言語自体が激しくシンプルじゃないのは皆さんご存知の通りですがw

C++で wrap って、key や value には Objective-C のオブジェクトを入れるの?
だったら You 最初から STL 使っちゃいなよw <> 名称未設定<><>2008/12/20(土) 02:01:54 ID:UW2/XF4a0<> .netを趣味でやっていたものとして言わせていただければ
Objective-cは最高だと思う。
なんたって無料で全ての機能を提供してくれているし。

知れば知るほど奥の深さに魅了されてしまう。
<> 名称未設定<>sage<>2008/12/20(土) 04:16:49 ID:R19Od2LJ0<> objcつかcocoaはコードがだらだら長くなって見づらくなるのが難点。
入力も面倒になってくる。 <> 名称未設定<>sage<>2008/12/20(土) 05:52:03 ID:WdjszjrV0<> 確かに名前空間を使用したプログラミング言語に比べてそこが一番の欠点だよな。

覚えきれん・・・・・・・。

それに一字でも間違ってたらもうアウトなわけだから
デリゲートメソッドとか悲惨。

エラーどころか警告すら出ないんだから。

<> 名称未設定<>sage<>2008/12/20(土) 07:35:31 ID:KNV2xQr00<> delegate method は確かに悲惨だよね。
でもそれ以外は XCode なら入力補助があるから
別に長くても問題なくない?
長いメソッド名だから半分強制的にコメントかかされているみたいなものなのも
半年後に自分のプログラムを読むときに案外役に立ってる気がする。
最近はすっかり汚染されてしまって、
自前のオブジェクトのメソッド名もすごい長くして
英語の文章として読めるようにしている。 <> 名称未設定<>sage<>2008/12/20(土) 07:45:55 ID:WdjszjrV0<> でもVisual.NETしていた人間にとってはX-codeの入力補助なんて糞。

まぁ僕みたいな凡人でトーシローのことですけど・・・・
皆さんは満足ですか?
あの入力補助で・・・・・。

ものすごく邪魔になることも多いんですが。 <> 名称未設定<>sage<>2008/12/20(土) 09:35:37 ID:Niwi5dnC0<> VCの入力補完も糞じゃね?
C#やVBなららくちんだろうけど。 <> 名称未設定<>sage<>2008/12/20(土) 11:51:03 ID:zY1fsqkk0<> 入力補完なんてふつうOFFだろ。鬱陶しい。

>>640
Objective-cに限らずgccは普通に全ての機能を無料で提供だろ。
<> 名称未設定<>sage<>2008/12/20(土) 12:47:41 ID:7wiP5m1V0<> こんぱいらはね <> 名称未設定<>sage<>2008/12/20(土) 14:03:40 ID:/70q+NvK0<> >>639
もちろんメインはSTLやboostで書いているけどUI周りがねー。 <> 名称未設定<>sage<>2008/12/20(土) 14:47:22 ID:eDv0h37G0<> >>648
だったら UI は PowerPlant でしょ。え、Cocoa Binding? Core なんちゃら? 何のことですか?

ソースがあるから頑張ればこれからも Mac OS X に追随できる (かも)。
ま、CodeWarrior に付いていたコードは Leopard でコンパイルすると deprecated 警告の嵐で引くけどw
オープンになった方はそこら辺改良されてたり... しないか。 <> 名称未設定<>sage<>2008/12/20(土) 17:36:34 ID:ElTiCEex0<> 弘法は筆を選ばず <> 名称未設定<>sage<>2008/12/20(土) 18:44:35 ID:WdjszjrV0<> ん?

誰か俺を呼んだ?
<> 名称未設定<><>2008/12/20(土) 23:35:09 ID:9hlRQq980<> 工房は筆を下ろさず <> 名称未設定<>sage<>2008/12/20(土) 23:39:41 ID:pVSz5R1L0<> 俺のアプリは「made with simple text」のロゴが入ってるよ。 <> 名称未設定<>sage<>2008/12/21(日) 01:03:07 ID:03GYYjSC0<> SimpleTextじゃぁ自慢にならんよ。
自慢したいんならedでコーディングしてなんぼ <> 名称未設定<>sage<>2008/12/21(日) 01:08:59 ID:kHbQDWZQ0<> そんなの何の自慢にもならんだろ。
自己満足以外の何ものでもない。 <> 名称未設定<>sage<>2008/12/21(日) 02:07:29 ID:BKOVdXos0<> WebKitを使ったプログラムでFlashプレイヤーのプラグインを使用すると
コンソールに「Debugger() was called!」と出力されますね。
Flashプレイヤー9の時は出なかったのですが、10に上げたら出るようになった感じ。
非常にうざったいです。
<> 名称未設定<>sage<>2008/12/21(日) 14:53:14 ID:qkj38C460<> 若干スレチ気味だけどデータの型からサンプルコードではない正式な使い方を記した文章を知る事は出来ないの?

使いたいAPIの引数にHogeHogeRefみたいのがあったときに、
どうやったらそれを作れるのかがsee alsoで書いてくれたり
HogeHogeRef自身が詳細へのリンクになってたりすると楽なのに。

例えばリファレンスでAPIの引数にCodecTypeって見つけて、
確かにリンクにはなってるんだけど、飛んでも
typedef OSType CodecType;
とだけしか書かれてないとか。
型の詳細もだけど、どんな値を入れたらいいのか知りたいんだよ!と。 <> 名称未設定<>sage<>2008/12/21(日) 15:16:33 ID:YL4QjoBD0<> ReferenceじゃなくてProgramming Guideを読めばおk <> 名称未設定<>sage<>2008/12/21(日) 15:41:09 ID:uX+Fb44J0<> QT関連は複雑な上にドキュメント不足は否めん。
QT7で追加されたAPIとかになると悲惨。 <> 名称未設定<>sage<>2008/12/21(日) 18:58:24 ID:1bYWKW200<> ココア(←なぜか変換できない) <> 名称未設定<><>2008/12/23(火) 10:35:34 ID:AMg5R5ie0<> Xcode3.1.2なんですがボタン上の文字のフォントを変えるにはInterface Builderのどこをいじればいいんでしょうか。設定が見つからないですorz <> 名称未設定<>sage<>2008/12/23(火) 10:55:29 ID:8y6CxMf40<> >>661
IBでボタンを選択して、FontメニューからShow Fonts。
普通のアプリと同じ。 <> 名称未設定<>sage<>2008/12/23(火) 11:25:11 ID:PGYHkvA30<> >>661
ていうかフォントを変えるな。
ほかに非標準のフォントをつかったボタンがあるソフトがありますか?
独自性とかいってかえれば良いってもんじゃありません。 <> 名称未設定<><>2008/12/23(火) 14:54:44 ID:AMg5R5ie0<> >>662
ありがとございます。
ボタンはできましたが、NSBoxのラベル部分が変わらないなあ。

>>663
やっぱり変えないほうがMacらしいんですかね。Cocoaの本読んでるんですがLeopardになってからかNSBoxのラベル部分の文字が薄くて読みにくい感じがしてBoldにしてみようかなと。 <> 名称未設定<>sage<>2008/12/23(火) 15:14:26 ID:8y6CxMf40<> >>664
NSBoxはIBからじゃ変えられないですね。
setTitleFont:するしかなさそうです。 <> 名称未設定<><>2008/12/23(火) 15:23:37 ID:AMg5R5ie0<> >>665
ありがとございます。試してみます。 <> 名称未設定<>sage<>2008/12/23(火) 15:56:58 ID:b+ysoZu80<> つうか、GUIのフォントってデフォルトから変えていいのか?
ガイドライン的に。 <> 名称未設定<>sage<>2008/12/23(火) 15:58:13 ID:b+ysoZu80<> スマソ、スクロール足りてなかったorz <> 名称未設定<>sage<>2008/12/23(火) 16:28:20 ID:Ch41JxbW0<> 自分で使う分には構わないだろ。
人様に使わせるのはどうかと思うが。 <> 名称未設定<>sage<>2008/12/23(火) 16:52:51 ID:9kr1H59b0<> >>667
システム環境設定→ユニバーサルアクセス <> 名称未設定<>sage<>2008/12/23(火) 19:43:10 ID:2buqxug+0<> 萩原剛志さんの本はプログラミング初心者には難しいと聞いたのですが
C言語の基礎を知ってる程度では、やはり難しいでしょうか?
「詳解 Objective-C 2.0」を買おうかと思っています <> 名称未設定<>sage<>2008/12/23(火) 19:49:25 ID:hxngkr3k0<> >>671
メモリ管理の話とか、オブジェクト指向の話とか、例外処理とかある程度知ってな
いと読むのつらいと思う。

でもまあ齧った程度でも知ってるのならばなんとかなる。
つーかおれはなった。 <> 名称未設定<>sage<>2008/12/23(火) 20:20:10 ID:2buqxug+0<> >>672
C言語のこと以外は全く知らないのでやめときます
別の本を探します <> 名称未設定<>sage<>2008/12/23(火) 20:36:00 ID:I2LctYge0<> Objective-Cに他の本はあるの? <> 名称未設定<>sage<>2008/12/23(火) 20:36:57 ID:CzyIQtOV0<> >>671
その本は、Objective-Cを多少知ってないと辛いと思うよ
たのCocoあたりから読むと良いと思います。 <> 名称未設定<>sage<>2008/12/23(火) 21:42:54 ID:Ch41JxbW0<> たのココは語尾がムカツク <> 名称未設定<>sage<>2008/12/23(火) 21:43:59 ID:IWcOJZP00<> あの口調はネットだから許される。
紙媒体では無理。 <> 名称未設定<>sage<>2008/12/23(火) 22:20:20 ID:CzyIQtOV0<> >>676
それは、確かにw
内容は良いのに残念なんだぜ! <> 名称未設定<>sage<>2008/12/23(火) 22:23:22 ID:m5cu4oUi0<> 日本語前提でHMDT系じゃない本で情報がup-to-dateなものはこれくらいしか思いつかないなあ...
作って楽しい!無償ではじめられるCocoaアプリ開発 Xcodeプログラミング大全
http://www.amazon.co.jp/exec/obidos/ASIN/4048676075/
執筆はPeopleに連載持ってる柴田さん。 <> 名称未設定<>sage<>2008/12/23(火) 22:25:53 ID:JS+9dWrN0<> 参考書無しのネットだけでここまで来たぜ!
で、自作の電卓が動かないんですけど。 <> 名称未設定<>sage<>2008/12/23(火) 22:33:54 ID:hxngkr3k0<> >>680
デバッグしる。 <> 名称未設定<><>2008/12/23(火) 23:26:43 ID:cFsVUxjvP<> sourceforgeに上げようぜ <> 名称未設定<>sage<>2008/12/24(水) 00:13:05 ID:ej1MZ/+00<> 質問です。
入力された文字列が数字のみかどうかのチェックをしたいのですが、
よろしいのでしょうか?
NSTextField上でも入力された後の処理でもかまいません。
よろしくお願いします。 <> 名称未設定<>sage<>2008/12/24(水) 00:34:59 ID:NHt4bY8g0<> formatterを使えばいいのではないか。 <> 名称未設定<>sage<>2008/12/24(水) 00:58:03 ID:YvN7oXnF0<> お手軽な入力フィルタだったら
NSTextFieldのサブクラスで
textView:shouldChangeTextInRanges:replacementStrings:
を実装すれば逝けると思います。 <> 名称未設定<><>2008/12/24(水) 01:57:36 ID:94m8GJXM0<> 具体的にプログラムを作るって話になると木下本読まないと厳しいが、
Obj-Cについてもう少し知ろうとすると、萩原本は必須になるとおもうよ。

柴田本は昔のはあれだった印象があるが、今のは使えるのか>詳しい人
<> 名称未設定<>sage<>2008/12/24(水) 08:41:08 ID:rdLNE9qM0<> >>683
よろしいのでしょうか?

でふいた <> 名称未設定<>sage<>2008/12/24(水) 09:55:33 ID:3pqZJ+9a0<> >>686
本屋で立ち読みした限りでは買う価値は依然としてない。
>>679の本はわからんが、多分、アレだろう。

柴田って古いMac OSとか絶滅したAppleIIとか古い話ばかりでいい加減消えて欲しい。
昔はBeOSの本とか出してたな。もう新しい技術についていけないお払い箱ライター。 <> 名称未設定<><>2008/12/24(水) 19:57:44 ID:pU6O2/Rq0<> 俺の同僚がcocoaアプリケーションチュートリアルだけで
目的とするプログラムを書き上げていた。

そいつは、
プロパティどころか、アクセッサメソッドすら理解していなかったけど・・・・・。
それどころかメソッドの書き方も分かってなかった。

もちろん起動しなかったけど、あれだけであそこまで完成させていたのには
ちょっと驚いた。
<> 名称未設定<>sage<>2008/12/24(水) 20:07:45 ID:rdLNE9qM0<> >>689
起動しないのに完成させたとは? <> 名称未設定<>sage<>2008/12/24(水) 21:11:18 ID:2Q4M0dVc0<> >>689
チュートリアルだけ呼んで、動きもしないプログラムを書くぐらいなら君にも出来るさ <> 名称未設定<>sage<>2008/12/24(水) 23:19:17 ID:PMjOK3gJ0<> >>691
さすがに芸人を呼ぶのは難しいだろw <> 名称未設定<>sage<>2008/12/25(木) 01:01:09 ID:DWj5DZ1R0<> >>689の言いたいことはわかるぞ。わかる。 <> 名称未設定<>sage<>2008/12/25(木) 02:34:18 ID:Nt+Z4c6J0<> >>689
起動しなきゃ理解してないってことじゃん。
それって単にオブジェクト指向プログラミングのテクニックを知ってるってだけじゃないの? <> 名称未設定<>sage<>2008/12/25(木) 10:18:41 ID:WmzR4NXU0<> >>692
お前キングコング並みに寒いぞ <> 名称未設定<>sage<>2008/12/25(木) 11:11:30 ID:92TaARB20<> >>695
ザ・パンチに失礼 <> 名称未設定<>sage<>2008/12/25(木) 13:37:57 ID:s26TIzeM0<> ウンコ連中によるM−1敗者イジリがスタートしたな <> 名称未設定<>sage<>2008/12/25(木) 14:28:10 ID:WTPPCtl00<> ↑西野乙 <> 名称未設定<>sage<>2008/12/25(木) 15:11:15 ID:CqvJET2e0<> Appleのサンプルコードに下のような方法で値を返してるのがあるんだけど、
xxxRef系って実装はObj-Cのオブジェクトなの?
ていうかCから扱うためにあるんだろうに、勝手にGCされちゃうわけ?

HogeHogeRef func() {
  HogeHogeRef r;
  // ... rの作成
  return (HogeHogeRef)[(id)r autorelease];
} <> 名称未設定<>sage<>2008/12/25(木) 15:16:32 ID:SqNR9yg50<> トールフリーブリッジ(toll-free bridge)といいます。
クラスによってはキャストだけでどっちにも使えます。

GCは使ってないから分かりません。 <> 名称未設定<>sage<>2008/12/25(木) 15:17:07 ID:9U2YaQaT0<> >>699
逆で、Obj-Cのオブジェクトの実装がxxxRef。…の場合が多い。
http://journal.mycom.co.jp/column/objc/038/index.html <> 名称未設定<>sage<>2008/12/25(木) 16:30:31 ID:D/fdkldl0<> 「勝手に」GCされたりはしないだろ。 <> 名称未設定<>sage<>2008/12/25(木) 21:10:59 ID:wIrcpCJz0<> CoreFoundationのCF〜RefとFoundationのNS〜ではtoll-free bridgeのものが多くあります。
しかしだからといって、それ以外の〜Refも同等のObj-Cのオブジェクトがあるとは思うべきではありません。
基本的にはそれぞれの適切な関数で解放すべきです。 <> 名称未設定<>sage<>2008/12/25(木) 21:15:39 ID:5IYO0foX0<> CFなんたらって何ですか?
怖くてNSなんたらしか使ったことないんですが。
ネットで拾って参考にしてるコードでもコピペでしか使ったことないですw <> 名称未設定<><>2008/12/25(木) 21:24:07 ID:bUlVH57f0<> >>704
>CFなんたら

Core Foundationでそ <> 名称未設定<>sage<>2008/12/25(木) 21:31:31 ID:9U2YaQaT0<> >>703
CFTypeRefの関数が使えるものならNSCFTypeRefが面倒見てくれますよ。 <> 名称未設定<>sage<>2008/12/25(木) 21:46:54 ID:9HW4c/IQi<> NSって何の略でそか? <> 名称未設定<>sage<>2008/12/25(木) 21:49:09 ID:wIrcpCJz0<> NextStep <> 名称未設定<>sage<>2008/12/25(木) 22:18:29 ID:O7EHv8wm0<> >>707
No Skin <> 名称未設定<>sage<>2008/12/25(木) 22:26:36 ID:uTnwU5K00<> 500とかRとか付いたり <> 名称未設定<>sage<>2008/12/25(木) 22:32:21 ID:jC1CCwNf0<> >>710
中古でしか手に入らん上にえらい高いんじゃw
あと50も思い出してあげて。 <> 名称未設定<>sage<>2008/12/25(木) 23:21:28 ID:CqvJET2e0<> ありがとうございました。
Toll-Free Bridgeというものがあって、いくつかそれに準拠しているわけですね。
ある型がToll-Free Bridgeかというかどいうのはどこかに明記されているのでしょうか。
それとも調べるしかないのでしょうか。 <> 名称未設定<>sage<>2008/12/25(木) 23:38:36 ID:uTnwU5K00<> >>711
確かに、50が一番最後まで残ってたわけだし、一番いろんなモデルがあったしね。 <> 名称未設定<>sage<>2008/12/25(木) 23:52:26 ID:kBcDv0rN0<> >>714
リファレンスの最初の方に載ってる。例えばNsStringの項目をみると、CFStringとキャストするだけでおk、と書いてある。
toll-freeで検索するといいよ。 <> 名称未設定<>sage<>2008/12/25(木) 23:53:11 ID:kBcDv0rN0<> アンカーミス、>>711です <> 名称未設定<>sage<>2008/12/26(金) 03:06:07 ID:py8HyFHM0<> NSStringにclassnameかけるとNSCFStringが返ってきたりするね。
<> 名称未設定<>sage<>2008/12/26(金) 17:59:20 ID:Gs8UicIM0<> そんなことわざわざしてみたりするんだ・・・・

でもNSArrayとかに最後にnil入れ忘れたりすると、
NSCFArrayエラーとかになるよね。

やっぱりnilはCFとの互換性のために必要なんだろうか。 <> 名称未設定<>sage<>2008/12/26(金) 18:18:16 ID:sdS5y8k+0<> nil無いと個数が判らんだろ。 <> 名称未設定<>sage<>2008/12/26(金) 18:40:44 ID:1VG5u8OV0<> >717
可変引数の使い方知らない? <> 名称未設定<>sage<>2008/12/26(金) 18:42:42 ID:yOYP+wqH0<> NSほげが実際にはCFほげを呼んでたりする、というのはそれでいいとして
おもしろいことにCFのフレームワークの中にNSほげのメソッドの実体が入ってたりする(Leoprad 限定)。

なんでそんなことをしているのか興味深いし、そもそも中の人がフレームワークをビルドするときに
どうやって依存性を解決しているのかもちょっと不思議だったりする。 <> 名称未設定<>sage<>2008/12/26(金) 18:44:02 ID:Gs8UicIM0<> あー可変引数の関係か。
そうかメソッドだもんな。あんまりメッソドって意識がなくなっていた。そっか。

文字列定数とかだったら最後にnullを書く必要とかないでしょ。とか言う感覚でいってしまった・・・ORZ。 <> 671<>sage<>2008/12/26(金) 19:28:07 ID:7HRNK0zL0<> 「たのしいCocoa」読みました
なんていうか、ラーメンズが出てたMacのCM思い出しました
レスくれた方ありがとうございました <> 名称未設定<>sage<>2008/12/27(土) 11:53:19 ID:6vw8P5nD0<> NSArrayControllerが持ってるcontentArrayの追加/削除された差分が欲しいんだけど、
arrangedObjectsやcontentへのbind:/addObserver:だと配列丸ごとしか受け取れないっす。

差分だけobserveしたい場合は、それを通知するカスタムオブジェクト作って
それとbind:するしか無いですか?

というか何故NSArrayControllerは差分(NSKeyValueChangeInsertionとか)を
送ってくれないですか? <> 名称未設定<>sage<>2008/12/27(土) 14:19:24 ID:1ymko+SU0<> >>723
間にNSArrayControllerを入れずに、ViewとModelを直接バインドする。

<> 名称未設定<>sage<>2008/12/27(土) 15:10:32 ID:6vw8P5nD0<> >>724
どうもです。

ModelがNSMutableArrayを持ってるわけじゃなくて、
そのModelがNSMutableArrayの中に入ってて、その数の増減をobserveしたいんです。

要するに

> 差分だけobserveしたい場合は、それを通知するカスタムオブジェクト作って
> それとbind:するしか無いですか?

ですよね?(カスタムオブジェクト == Modelの増減を管理/通知するKVCを実装)

このModelの入ってるNSMutableArrayの持ち主が今のところNSArrayControllerしか
いないので、こいつがNSKeyValueChangeInsertionを通知してくれれば助かるんですが、
してくれないんですよね?
<> 名称未設定<>sage<>2008/12/27(土) 16:00:30 ID:1ymko+SU0<> >>725
MVCパターンにおいては、Modelコンポーネントは1つです。たとえ、それが複数のクラスで構成されていたとしても。

今回のケースは、Modelの内部に配列を含んでいるという話なのでは?

> このModelの入ってるNSMutableArrayの持ち主が今のところNSArrayControllerしかいない
NSArrayControllerはどのオブジェクトとバインドしてるんですか? 普通はModelとバインドしますよね?

> カスタムオブジェクト == Modelの増減を管理/通知するKVCを実装
これをModelとして実装すればよいのではないかと思います。
まあ、あえてこの機能をControler側に実装するなら、NSArrayControllerのサブクラスを作ることになりそうですが。
<> 名称未設定<>sage<>2008/12/27(土) 16:03:14 ID:wr2ktw9Z0<> >>683です。
>>684-685
ありがとうございます。自己解決できたのでお役にたてればと。

// 数字以外のキャラクターセット
NSCharacterSet *decimalInvertSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
// 上記セットがあるか
NSRange rng = [string rangeOfCharacterFromSet:decimalInvertSet];
if(rng.length > 0){
// 数字以外が含まれている
}else{
// 数字のみ
}
<> 名称未設定<>sage<>2008/12/27(土) 16:18:18 ID:wr2ktw9Z0<> >>723
NSArrayControllerのcontextがCoreDataなら
NSManagedObjectContextObjectsDidChangeNotificationで
NSInsertedObjectsKey、NSUpdatedObjectsKey、NSDeletedObjectsKey等でわかるかもしれません。

NSArrayControllerのみでもいけるのかな?
詳しくはググって見て下さい。 <> 名称未設定<>sage<>2008/12/27(土) 17:51:40 ID:HOyebOs70<> NSURLConnectionを使っています。

なぜか接続に失敗するのですが、そのときに

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
が呼ばれ、

NSLog(@"Connection failed! Error - %@ %@",
[error localizedDescription],
[[error userInfo] objectForKey:NSErrorFailingURLStringKey]);

の出力により

> Connection failed! Error - ネットワークの接続が解除されました http://example.com/hoge

と出ているのですが、そのアプリを終了させても
どうもセッションをはって何やらダウンロードが続いているようなのです。
netstat で ESTABLISH になっていますし、ネットワークの下りは一定の速度でダウンロードしているようです。

質問は二つあります。
1. アプリを終了させても接続が続くとは、
Mac OS X や NSURLConnection は一体どのような仕組みになっているのでしょうか。
2. 失敗しても安全にダウンロードが終了できるような NSURLConnection の使い方に何かこつがあるのでしょうか?

どなたかご存知の方いらっしゃいましたらどうかお教え下さい。






<> 名称未設定<>sage<>2008/12/27(土) 18:25:21 ID:6vw8P5nD0<> >>726 ありがとう。

> 今回のケースは、Modelの内部に配列を含んでいるという話なのでは?
繰り返しですが、これは>>725の通り、ModelはNSMutableArrayを持ってないです。
Modelインスタンスが複数存在して、その変化をobserveしたいんです。
これをNSArrayControllerがやってくれるかな、と思ったんですが。

> NSArrayControllerはどのオブジェクトとバインドしてるんですか? 普通はModelとバインドしますよね?
NSArrayControllerのprepareしたcontentにModelを addしているので、
Modelにバインドはしてないんです。objectClassにModelクラスをあててます。

>> カスタムオブジェクト == Modelの増減を管理/通知するKVCを実装
> これをModelとして実装すればよいのではないかと思います。
やっぱり、監視用に別のModelを作って監視したいModelへの対多リレーション持つしか無いんですね。

これだとNSArrayControllerは必要ない、というかあまり便利じゃないんだよなぁ。
なぜInsertion/Removalを通知してくれないんだろうか。

>>728 ありがとう。
でも残念ながらCore Dataではないです。 <> 名称未設定<>sage<>2008/12/27(土) 18:38:40 ID:6vw8P5nD0<> 連投すいません。>>723です。

例えばNSTableColumnは NSArrayController.arrangedObjects.modelKeyとbindすると
model.modelKeyをその分だけ表示しますが...

このNSTableColumnのようにmodelの数だけ何かを表示する
カスタムビューを作るのを想定してくれると、やりたいことをわかってもらえるでしょうか?

この時NSArrayControllerは差分を送って来ないので、
カスタムビューは自分で差分取らなきゃいけない、これが差分だけ追加/削除できたら
ありがたいのに、という話なんですがどうでしょうか?

これを実現するのにmodelに対してリレーションを持つ別のmodel2が必要なんだとすると、
NSArrayControllerはいらなくなっちゃうし、便利じゃないような気がするんですが。 <> 名称未設定<>sage<>2008/12/27(土) 19:51:29 ID:dunn+fh10<> >>729
具体的に connection が死ぬ URL を教えてくれないと何とも言えんよ。
憶測で書くけども、
2. は didFailWithError: のなかから [connection cancel] を読んでみたら?
1. NSURLConnection は別スレッドでいろいろ動いているので、
メインスレッドが終了して app が終了したつもりだけど
副スレッドが終了してないから全体は終了していないのかもしれない。
<> 名称未設定<>sage<>2008/12/27(土) 23:23:38 ID:1ymko+SU0<> >>731
NSTableViewみたいなカスタムビューを作りたいのは分かったけど。
結局のところ、そのカスタムビューに表示させたい項目って何?
ある配列の追加/削除された差分のみを表示したいなら、その差分のみの配列を作って、それにバインドするのが良いです。

もし、カスタムビューに配列の全ての要素を表示させ、パフォーマンス改善のために差分のみが欲しいという話をしてるのなら、カスタムビューの設計が間違っているか、もしくはパフォーマンス改善のためのアプローチが間違っている気がします。 <> 名称未設定<>sage<>2008/12/27(土) 23:31:53 ID:53GKO3UPi<> >>732
しかしメインスレッドの終了時にそこで作成されたサブスレッドは終了されるんじゃないの?
そのDLされてるってのは全く別件な予感。 <> 名称未設定<>sage<>2008/12/28(日) 00:57:58 ID:cC5PCGpR0<> >>732
ちょっとはばかられる URL なもので一般論ですみません。
とりあえず [connection cancel] をしてみても同様にプロセス終了してもなお通信していました。
あと書き忘れましたが、一度スリープさせればその通信は切れます。
そうこうしているうちにその URL 群が全くエラーがでなくなってしまいました(それでいいんですけど)。

>>734さんの意見も関連して、NSURLConnection によって作られたスレッドは
メインのプロセスが終了しても生き続けるものなのでしょうか?
このようなことが絶対に起こらない、NSURLConnection の正しい書き方があるのでしょうか。
<> 名称未設定<>sage<>2008/12/28(日) 01:18:56 ID:Y9TmE8bu0<> >>735
このサイトは参考にならない?
http://developer.apple.com/documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html <> 名称未設定<>sage<>2008/12/28(日) 01:32:53 ID:Y9TmE8bu0<> 僕は以前NSSocketを使ってリモート間のコンピュータを制御したいなぁと
考えていたんだけど、時間が無くて諦めてしまった過去がある。

なんかそんなAPIを使うよりCFSocketを使ってるみたいだね。ボンジュールに関係して・・・・・

マァ結局Cで用意されているBSDSocketを使ってやったんだけど、
いつまでたっても原始人扱いっす。
<> 名称未設定<><>2008/12/28(日) 02:15:09 ID:v0QJFQvm0<> NSSearchFieldにキーボードから入力→
1文字打つごとにデリゲートメソッドを呼んでインクリメンタルサーチさせてます。

結果を入れたNSMenuはNSSearchFieldの虫眼鏡アイコンをクリックすれば表示できるのですが、
クリックしなくてもメニューをビロッと出したいんです。

Spotlightみたいな動作はどんな風にやれば可能かわかる人います???
虫眼鏡をperformClick:してもだめでした。 <> 名称未設定<><>2008/12/28(日) 03:42:46 ID:V8qdzKYEP<> >>738
ttp://aerial.st/2ch-log/cocoa/cocoa-005.html#res735 あたりが参考になるのでは。
これはNSSearchField中で↓キーが押下されたときにメニューを表示してるけど、
やることは同じだと思う。 <> 名称未設定<>sage<>2008/12/28(日) 06:27:37 ID:v0QJFQvm0<> >>739
朝早くからヒントをくれてありがとー。
popUpContextMenu:withEvent:forView:で解決したんだけど、位置決めするのに使うNSEventの
生成とか冗長で面倒でした。キー入力が少し間を置くと、ファーストレスポンダがNSMenuに取られて
しまうのでその辺を改善していこう.. <> 名称未設定<>sage<>2008/12/28(日) 08:30:32 ID:suc3Lt/M0<> >>733
えっと、カスタムビューの話は例ですが、
最初>>723でも書いてる通り、差分だけ受け取る方法は
NSArrayControllerを使わないで、ModelのNSMutableArrayを持つ
通知用オブジェクトを別途作ればできることはわかってます。

やってみるとわかるけどビューに限らず、NSArrayController.arrangedObjects.modelKeyと
bind:なりaddObserver:したオブジェクトが差分を受け取れないというのは凄く不便。
modelなりmodelKeyなりが全部くるのでそれぞれが何かを適用済みかどうか
判断しなきゃいけない。

<http://homepage.mac.com/mmalc/CocoaExamples/controllers.html>
の例でもやはりobserveしたオブジェクトが、保持している以前のものと
比較して差分を取ってます。

>>723で言いたいのは、実現するための別の解決策があるかどうかではなくて、
NSArrayControllerが差分を送らないんだけど、オプションなり使い方で
どうにかなんないかな?ということを聞きたかったです。(丸ごとしか受け取れないのか?ということ)

こんなだとNSArrayControllerの有用性って、それこそNSTableColumnとbind:するとき
以外に見いだせないんだが、誰かNSTableColumn以外とbindして便利に使ってる人いませんか?

bind:の時はまぁ色々としょうがないとしても、せめてaddObserver:の時は
Insertion/Removalで通知してほしいわけだが、なんでこんなんになってんのかなぁ...

この辺がわかるbindingの神様の出現を待ちます。 <> 名称未設定<>sage<>2008/12/28(日) 11:04:56 ID:UzeGKi4d0<> NSArrayController がそういう仕様なんだから仕方がない。
API にだって至らない点はあるさ。Apple にバグレポートをかいて、
10.6 で直ってることを期待するしかない。
だいたい問題の解決策を知ってるんだからあきらめたら? <> 名称未設定<>sage<>2008/12/28(日) 11:39:36 ID:7HqAPOGr0<> >>741
結局のところ、何をしたいのかがさっぱりです。
NSArrayControllerは、ViewとModelの間に置くものです。
今回は、Modelとは接続していないそうですが、カスタムビューとも接続していないとなると、いったいどういう使い方をしてるんですか?

> やってみるとわかるけどビューに限らず、NSArrayController.arrangedObjects.modelKeyと bind:なりaddObserver:したオブジェクトが差分を受け取れないというのは凄く不便。
> 実現するための別の解決策があるかどうかではなくて、 NSArrayControllerが差分を送らないんだけど、オプションなり使い方でどうにかなんないかな?

別の解決策があるのに、あえてNSArrayControllerにこだわる理由はなんですか?
NSArrayControllerでは、どうにもならないことは自身で確認済みなのでは?
<> 名称未設定<>sage<>2008/12/28(日) 12:06:39 ID:suc3Lt/M0<> >>742
ありがとう。NSArrayControlerがそういう仕様なんだとすると、
NSTableColumn以外とのbindで役立つケースが見つからないので、
本当にそうなんだろうか?というのが質問のきっかけです。
自分が知らないだけかもしれないので。

>>743
やりたいことや解決策、NSArrayControllerにこだわるわけじゃなくて、
最初のレス通り、NSArrayControllerが差分を送らないのはなんなんだ?
差分じゃないなら他のModelやNSObjectControllerを使う方が便利、
だとするとNSArrayControllerの存在意義はNSTableColumnだけ?
というのを疑問に思ったんです。

既にNSArrayControllerを持っているのに、役立てることができず
回避策を取るのは美しいとは思えないし、

考え方のプロセスとしては、
回避策があるのでそっちを使う→そうするとNSArrayControllerをどうにも便利に使えない
→NSArrayControllerは不便なもの?→いや、自分が便利な使い方を知らないだけなのでは?
という感じです。

この辺誰も不便に思ってない事が不思議なんですが。
NSTableColumn以外とbind:してかつ便利な使い方あるよって人、
もしくは、いや不便だよそういうものみたいだよって人の意見聞きたいです。

とは言え、レスくれた人ありがとう。
ここはNSArrayControllerを便利に使うために納得いくまで調べたいです。
年明けになりそうですが。 <> 名称未設定<>sage<>2008/12/28(日) 12:09:46 ID:UzeGKi4d0<> >>744
>ここはNSArrayControllerを便利に使うために納得いくまで調べたいです。
>年明けになりそうですが。
いや、Apple がくれた API をそんなに神聖視してもしかたがないよ。
自分が使いかた知らないだけのばあいもあるけど、
実際 API に機能が足りないこともあるわけでさ。

NSArrayController はむしろ CoreData に接続してつかうのが主目的で
Apple はつくったんじゃないの?僕はそうやって
NSTableColumn に bind して便利に使えてるけど。
<> 名称未設定<>sage<>2008/12/28(日) 12:33:30 ID:suc3Lt/M0<> >>745
どうもどうも。

> いや、Apple がくれた API をそんなに神聖視してもしかたがないよ。
もちろんそうなんですが、まず自分の無知を疑うというのは自然だと思うんです。

Cocoa bindingの考え方と実現方法はNSBinderを含め素晴らしいと思うので、
なおさらNSArrayControllerの不便さを不思議に思ってたわけです。

主目的はわかるけど、NSArrayControllerを名乗ってるのに
NSArrayの扱いでNSObjectControllerや他のModelに劣るようだと
NSTableColumnでしか使えないNSArrayControllerって何?
いや自分がおかしいでしょJK、という発想になると思いまして。

やりたいこと、解決したい事があるわけではなくて
NSArrayControllerが不便なのが納得いってない、という感じなので、
ブラックボックスな部分でそういう不便な実装がなされている、
ということを少しでも垣間みることが出来たら、それで満足すると思います。
#できれば、便利な使い方がある、と言う方を期待してはいますが。

そういう先人がいたらと思って質問しました。 <> 名称未設定<>sage<>2008/12/28(日) 13:56:00 ID:hmFht9Ut0<> 調べると出てきたと思うけど、ここの「(Missing) KVO notification old and new values」には
http://homepage.mac.com/mmalc/CocoaExamples/controllers.html

"The change dictionary doesn't contain old and new values.
This is not your fault, it's due to a bug in the controller.
This bug will not be fixed in the forseeable future."

って書いてあってねえ…
なぜAppleがこの挙動のままにしているのかは俺も不思議。 <> 名称未設定<>sage<>2008/12/28(日) 14:47:11 ID:7Qwd5CJii<> >>747
サンクス!

そこ読みとばしてた。ホントありがとう。ホント感謝。

あーもう俺のバカっ

付き合ってくれた人達にもほんと多謝。
良い年末を。



<> 名称未設定<>sage<>2008/12/28(日) 16:18:48 ID:7HqAPOGr0<> >>746
> NSArrayControllerを名乗ってるのにNSArrayの扱いでNSObjectControllerや他のModelに劣るようだとNSTableColumnでしか使えないNSArrayControllerって何?

NSArrayControllerは、MVCのうちControllerに当たるものです。それをModelとして扱おうとしてませんか?
それだと、根本的にうまくいきませんよ。


>>747
それは、バグじゃなくて、仕様だと思います。
NSArrayControllerは、Viewに対して配列を見せるためのものだと言う事を理解してください。
Viewにとっては、配列に追加/削除された項目を知ってもしょうがないです。
画面にリストなんかを描画するために、常に配列全体を要求するでしょう。 <> 747<>sage<>2008/12/28(日) 16:54:32 ID:4MFolM6V0<> >>749
NSArrayControllerのリファレンス見るとarrangedObjectsのところに
"This property is observable using key-value observing."
なーんて書いてあるから当然差分も受け取ることができると期待してしまうんだよ。

あと多分あんた釈迦に説法やってるぜ。 <> 名称未設定<>sage<>2008/12/28(日) 20:00:12 ID:stOPgQeC0<> NSMutableArrayにバインドしたNSArrayControllerの
追加や削除ってNSMutableArrayで行うもんじゃないの?
NSArrayControllerはそれに追従したりソートして見せかけたりするもので
直接追加や削除をしないもんだと思ってるんだけど。 <> 名称未設定<>sage<>2008/12/28(日) 22:31:51 ID:kMfgkKcQ0<> >>746
NSArrayControllerのbind相手にはNSTableColumn, NSTableViewの他にも
NSPopupButton, NSMatrix, NSCollectionView, IKImageBrowserViewがあります。
更に、GraphicsBindings(Cocoa Bindings Examples and Hints)のような自前の
カスタムクラスもあります。

change Dictionaryから情報がとれないのは、カスタムクラスとNSArrayControllerを
bindする時に余分な手間がかかることになりますね。
配列の要素のプロパティをobserveするのに必要な情報がchange Dictionary
からは得られないのは困ったものです。
現状ではGraphicsBindingsのような方法をとるしかないようです。
ただモデルオブジェクトのプロパティが変化したことの通知を受けるのに
arrangedObjects.propertyをobserveすることで、代用できる場合もあります。
どのオブジェクトかは不明だけどプロパティが変化したことは通知がきます。

私はNSMatrixのサブクラスで、iTunesのartWork viewerの様なものを作っていましたが、
LeopardでIKImageBrowserViewが導入されたので、IKImageBrowserViewに切り替えました。
<> 名称未設定<>sage<>2008/12/29(月) 08:10:15 ID:Y2X+4dQpi<> >>749-750
根本的に話が噛み合ってないよ

>>751-752
まさにそういう事
<> 名称未設定<>sage<>2008/12/29(月) 08:13:23 ID:Y2X+4dQpi<> あ、レス番間違えた
でもわかるよね
>>749,751と>>750,752ね <> 名称未設定<>sage<>2008/12/29(月) 08:17:58 ID:drZoORpn0<> 本人かどうか知らないけど、
そんなくだらないレスするな。
<> 名称未設定<>sage<>2008/12/29(月) 11:36:38 ID:Xwc+0ccb0<> >>747
mmalcってもしかしてあの英語がちょっとなまっている人か。

だいぶ前にバグとして認知されているのに直されないというのは、あまりインパクトがないと
認識されているか、fix が結構面倒くさいとか、何か理由があるんだろうねえ。 <> 名称未設定<>sage<>2008/12/29(月) 16:33:53 ID:TKk5E2Xt0<> >>756
英語下手なもんで mmalc さんの英語はまったく流暢にみえるんだが、
ちなみにどの辺がなまってるのか勉強のためにおしえてください <> 名称未設定<>sage<>2008/12/30(火) 01:24:22 ID:I5OBkT890<> >>757
そのウェブページじゃなくて本人のしゃべり(発音)のこと。 <> 名称未設定<>sage<>2008/12/30(火) 14:20:27 ID:1+yUgkxZ0<> ああ、なるほど。本人にあったことないから判らないよ :p <> 名称未設定<><>2008/12/30(火) 17:30:33 ID:gOZWRIBD0<> バインディングについて基本的なところは分かってきました。

でもこんなことやっちゃていいのか!と思ってしまう。
でも便利なんだよねー。
特にNSTableViewに対して応用が利きそうだ。 <> 名称未設定<>sage<>2008/12/30(火) 20:52:08 ID:DGdbKMqz0<> a.アプリケーション間の通信について質問です。
 [NSDistributedNotificationCenter defaultCenter]
というのがあるようなのですが、イマイチ具体的な使い方が見つかりません。
とっかかりに便利なサンプルコードをご存知でしたら教えてください。

b.さらにググっていたら、
 [[NSWorkspace sharedWorkspace] notificationCenter]
っていうのを使っている例を見つけたのですが、これは
 [NSNotificationCenter defaultCenter]
というのとは違うものなのでしょうか?

この辺の飲み込みが悪くて・・・アドバイスをお願いします。 <> 名称未設定<>sage<>2008/12/31(水) 00:24:36 ID:OE+Yuv650<> すみません、年末に質問です。
NSTextViewのコンテキストメニューを自作しているのですが、
control+クリックでデフォルトメニュー(Search in Spotlight..)が表示されてしまいます。

サブクラスを作成して、- (void)rightMouseDown:(NSEvent *)theEventで
右クリックの場合は自作のメニューが表示できたのですが、
- (void)mouseDown:(NSEvent *)theEvent
{
// control click
if([theEvent modifierFlags] & NSControlKeyMask){
[self rightMouseDown:theEvent];
}
}
で右クリックの処理に飛ばしてもデフォルトのメニューが表示されてしまいます。
control+クリックでデフォルトメニューを消して自作メニューを表示させることは
出来ないのでしょうか?
ちなみに、setMenu:で自作メニューをセットすると、デフォルトメニューの下に
自作メニューが表示されてしまいます。

<> 名称未設定<>sage<>2008/12/31(水) 01:48:33 ID:OE+Yuv650<> すみません。>>762です。
NSViewのmenuForEventでいいのですね。あっさり解決しました。
スレ汚しすみません。 <> 名称未設定<>sage<>2008/12/31(水) 09:57:52 ID:JHc0H2Kf0<> >>761
a.
NSDistributedNotificationCenterのリファレンスにあるRelated Sample Codeは見ましたか?

b.
NSNotificaitonCenterはdefaultCenterのみとは限りません。自分でインスタンスを作って使うことも出来ます。
NSWorkspaceのリファレンスには他のクラス同様にNotificationの一覧がありますが、これはdefaultCenterではなく
NSWorkspaceのnotificationCenterを使って通知されます。

APIリファレンス読めば大抵のことは解決するんですよね。 <> 名称未設定<>sage<>2008/12/31(水) 13:05:09 ID:VM+WRBUK0<> >>763
Leopardならdeleage methodsの
- (NSMenu *)textView:(NSTextView *)view menu:(NSMenu *)menu forEvent:(NSEvent *)event atIndex:(NSUInteger)charIndex;
を使ってコントローラから制御できます。

release noteにしか記載がありませんが、使えます。
NSTextView.h
- (NSMenu *)textView:(NSTextView *)view menu:(NSMenu *)menu forEvent:(NSEvent *)event atIndex:(NSUInteger)charIndex;
// Delegate only. Allows delegate to control the context menu returned by menuForEvent:. The menu parameter is the context menu NSTextView would otherwise return; charIndex is the index of the character that was right-clicked.
<> 名称未設定<>sage<>2008/12/31(水) 15:35:14 ID:Hoil/CeQ0<> いきなり話ぶったぎるけど
NSMutableArrayまでthread unsafeになってるけど
正しくlockかけて使えばsafeな仕様なのかな?
それもだめならmain thread内で回しておいて最後にNSArrayにinitWithArrayすりゃいいんだけどそんなコストはなあ

まあthread内でNSEnumerator使っててconsoleにエラーログ大量に出てたんで
調べてみたらNSFileManager , NSEnumerator , NSMutableArrayが対象になってたのは分かった。
NSEnumeratorはまあ使わなくてもなんとかできるがNSFileManagerはそうはいかん。
でもってNSFileManagerの部分だけ取り出してthread回してみたら
どうにもこいつだけは回避できそうにもない
POSIX的にやるしかないんかね>thread内でファイル操作

<> 名称未設定<><>2008/12/31(水) 15:43:39 ID:pWiXouOZ0<> で、要約すると? <> 名称未設定<>sage<>2008/12/31(水) 15:50:23 ID:oXdRdpSS0<> >>766
何が問題なのかさっぱり解らん。
もう少し具体的に書いたら? <> 名称未設定<>sage<>2008/12/31(水) 16:12:37 ID:Hoil/CeQ0<> >>768
いや書いたまんまなんだけど。
回避できない以上NSFileManagerを使わずにやるしかないのかなって話。

NSMutableArrayはテスト用のコード書き中。 <> 名称未設定<>sage<>2008/12/31(水) 16:15:23 ID:PCjQWXJZ0<> >>766
まずは Threading Programming Guide を読んでから質問しなさい <> 名称未設定<>sage<>2008/12/31(水) 16:23:13 ID:Hoil/CeQ0<> >>770
とっくに読んでるって。
ちなみにNSAutoreleasePool関連の問題ではないよ>NSFileManager
ただの煽りなら消えてくれ。 <> 名称未設定<>sage<>2008/12/31(水) 17:20:46 ID:YdpY9GEO0<> >>771
何を回避したいのか全然わかんねぇよ。逆ギレしてるし。
要点をまとめて整理して書かないと誰にもわからん。 <> 名称未設定<>sage<>2008/12/31(水) 17:30:59 ID:BlFHlIMw0<> >>766
>NSMutableArrayまでthread unsafeになってるけど

NSMutableArrayぐらいthread safeにしとけって?
明らかにマルチスレッドでアクセスしない場合にもいちいちロックをかけられたりすると、
パフォーマンスが落ちるだけで嬉しくないんだけど...

>正しくlockかけて使えばsafeな仕様なのかな?

「正しく」使えばねw
NSMutableArray自体に同時アクセスしないことは当然として、要素の寿命にも気をつかわないと
いけないけど(あるスレッドで参照中に別のスレッドのせいでreleaseされるかもしれない)。

とりあえず部分レス。 <> 名称未設定<>sage<>2008/12/31(水) 17:31:23 ID:34R3NV1F0<> 確かに>>766では誰も分からないよ。
まぁ詳細にかけない事情があるのだろうと察するけど。
それでも要点を絞って書くことは出来るはず。

ここは2チャンネルにしては珍しく、丁寧に答えてくださる方が結構いるほうだと思うよ。
ほかのプログラムスレは悲惨だけど。 <> 名称未設定<>sage<>2008/12/31(水) 18:43:53 ID:A5zFe/us0<> >>764
有り難うございます。こんな理解であっていますでしょうか。

[NSDistributedNotificationCenter defaultCenter]はタスク間で共有され(るもののラッパ)、
[NSNotification defaultCenter]はアプリケーション単位で用意され、
[NSWorkspace sharedWorkspace]もアプリケーション単位で用意され、
[[NSWorkspace sharedWorkspace] notificationCenter]はworkspace側で
 使われるnotificationCenterで、[NSNotification defaultCenter]とは別物
distributedの方はポインタ渡しが出来ないので高コスト、NSstringで代用されている

なので、タスク間で共有する場合以外はNSNotificationを使えばよく、
Workspace依存するもの以外はdefaultCenterでよく、
別途必要な場合のみ別途インスタンス化する <> 名称未設定<>sage<>2008/12/31(水) 19:31:04 ID:OE+Yuv650<> 複数のNSTableView間でドラッグ&ドロップを実装しているのですが、
自分のテーブルにドロップ出来ないようにするには、どうすればいいのでしょうか?

それぞれのNSTableViewのregisterForDraggedTypesで同一のペーストタイプ名を
登録しています。 <> 名称未設定<>sage<>2008/12/31(水) 20:16:52 ID:JHc0H2Kf0<> >>775
多分。あと[NSNotificationCenter defaultCenter]ですね。

>>776
- (NSDragOperation)tableView:(NSTableView *)tableView validateDrop:(id <NSDraggingInfo>)info
proposedRow:(int)row proposedDropOperation:(NSTableViewDropOperation)operation
で、
id draggingSource = [info draggingSource];
のdraggingSourceが自分かどうかチェックすればいいと思います。 <> 名称未設定<>sage<>2008/12/31(水) 20:40:36 ID:OE+Yuv650<> >>777
>>776です。ありがとうございます。
NSTableViewのサブグラスに実装して
// 自分のテーブルなら無視する
if ([info draggingSource] == self) {
return NSDragOperationNone;
}
で、行けました。 <> 名称未設定<>sage<>2008/12/31(水) 21:01:43 ID:JHc0H2Kf0<> >>778
dataSourceに実装するメソッドですので別にサブクラスを作る必要はないですよ。 <> 名称未設定<><>2008/12/31(水) 21:57:09 ID:GejtfmAN0<> 昨日バインドについて少しずつ分かってきたとのたまった者です。

私は阿呆でした。

荻原さんのObjective-C2.0のp507ページなんですが、
3行目に「辞書オブジェクトは"content"というキーで参照できます」
とあります。
これはそのまま受け取っていいのでしょうか?
それともそれは荻原さんが、そのプログラム内部でそう定めているから
そうなのでしょうか?

あほな私に助言していただければ幸いです。

後、唐突ですが、今年一年皆様に本当にお世話になりました。
来年もよろしくお願いします。 <> 名称未設定<>sage<>2008/12/31(水) 22:31:39 ID:MjZqxFiz0<> >>779
ええ、ただサブクラスとデータソースとデリゲートをひとつのクラスにまとめて書いています。
テーブルが多いのでそれぞれを分けて書くと多くなるので。
<> 名称未設定<>sage<>2008/12/31(水) 23:56:43 ID:GoahojC00<> >>780
みんなが荻原さん本持ってるとは限らないので、
質問内容が本を持ってない人にも分かるように質問してみたら?
そうやって頭の中を整理する過程で判るときもありますよ。 <> 名称未設定<>sage<>2009/01/01(木) 00:24:40 ID:JsmL13+v0<> 2008年も無事終了。

皆さん、明けましておめでとうございます。

>>782
バインディングについて勉強中です。
キー値コーディング(KVC),キー値監視(KVO)については大体分かってきましたが、
その総決算とも言うべきcocoaバインディングに取り組んでいます。

windowにはtextFieldを配置し、こいつをNSDictionary型のdicとバインディングさせるだけのプログラムを作ってみました。

- (void)awakeFromNib
{
dic = [[NSDictionary alloc] initWithObjectAndKeys:@"value1",@"key1",nil];
objController = [[NSObjectController alloc] setContent:dic];

[textField bind :@"value" toObject :objController withKeyPath :@"content.key1" //これです。このContentがないとアクセスできません。コレは何?
      options :nil];
}
これでビルドするとtextFieldにValue1の値が入っている。
ただそれだけのプログラムなんですが・・・・ <> 名称未設定<>sage<>2009/01/01(木) 00:46:12 ID:nr1t9X2O0<> >>783
その「content」はNSObjectControllerのcontentプロパティのことなんです。
content.key1で、そのNSObjectControllerのcontentであるオブジェクトのkey1プロパティを指定してます。

IB上ではController KeyとModel Key Pathに分けて設定しますが、実際のところこれは一つのKey Pathです。 <> 名称未設定<>sage<>2009/01/01(木) 00:49:01 ID:NZvHn75T0<> 正月からココアかよ! <> 名称未設定<>sage<>2009/01/01(木) 00:57:45 ID:JsmL13+v0<> >>784
さっそくレスありがとうございます。

なるほどー。
そういうことだったんですね。
IBでもやろうと取り組んでいたんですが、
Controller keyが一体何のか分からなかったんですよ。

ありがとうございます。 <> 名称未設定<>sage<>2009/01/02(金) 16:00:52 ID:y7bSH71J0<> ObjCのメモリ管理って難しいですね。バグの温床になりそうです。こうなるとGCを使いたい気も
しますが、これはこれでプログラムの内容によっては別の問題を引き起こしそうな気もします。
ところでautoreleaseにしたobjectはframeworkが適当なタイミングで解放してくれるという
ことですが、運悪くretainする前に解放されてしまうことは起こりえないのでしょうか? <> 名称未設定<>sage<>2009/01/02(金) 16:37:12 ID:dyxTOEUj0<> >>787
autoreleaseは、今ではないいつか、自分ではない誰かにreleaseされるというだけです。
より具体的に言えば、autoreleaseメッセージを送られたオブジェクトはNSAutoreleasePoolに登録され、
当該NSAutoreleasePoolが解放されるときにreleaseされます。
通常NSAutoreleasePoolはRunLoopごとに生成と解放を繰り返していますが、自分で生成・解放することも出来ます。

参照カウントによるメモリ管理はとっつきにくいかもしれませんが、一度理解すると簡単です。
<> 名称未設定<><>2009/01/02(金) 18:22:04 ID:v8vXElzP0<> IB3.1ですがボタンをOption+ドラッグでコピーしてもNSMatrixが作られないんですがどのようにすればいいでしょうか? <> 名称未設定<><>2009/01/02(金) 18:25:38 ID:v8vXElzP0<> >>789
メニューからLayout->Embeded Objects in->Matrixでできました。なんでこんな方法に・・・ <> 787<>sage<>2009/01/02(金) 19:21:43 ID:anFlbT+C0<> >>788
解説ありがとうございます。(数日前にObjCを調べだしたばかりなので勉強になります。)
RunLoopごとということはイベント待ち状態に入るようなメソッドを呼び出した後は
autoreleaseなobjectは解放されてしまっている可能性があるということでしょうか。
そのような関数を呼び出す前にretainしておけば問題ないということですね。

> 参照カウントによるメモリ管理はとっつきにくいかもしれませんが、一度理解すると簡単です。

色々なclassを見て理解を深める必要がありそうです。今は@""で作られるNSString objectは
autoreleaseなのかな? Class methodから返されるobjectは普通autoreleaseになっていそう、
などと頭を悩ましています。 <> 名称未設定<>sage<>2009/01/02(金) 19:34:28 ID:dyxTOEUj0<> >>791
まずはリファレンスを一読することをお勧めします。英語の方が読みやすいですが。
http://developer.apple.com/jp/documentation/Cocoa/Conceptual/CocoaFundamentals/

参照カウントを用いたCocoaのメモリ管理については、ここによくまとまっています。
http://wwwa.dcns.ne.jp/~nito/CocoaClub/index.html

クラスメソッド、とくにファクトリメソッドと呼ばれるメソッドで返されるオブジェクトは基本的にautoreleaseされているものとして
考えて間違いありません。
例えば[NSString string]などですね。
これは自分でファクトリメソッドを作るときのことを考えれば理解出来ます。

あと@""で作られるNSStringはさらに少し特殊です。基本的に通常のNSStringと同様に扱うべきですが、
実際にはオブジェクト定数と呼ばれる解放されないオブジェクトです。 <> 名称未設定<>sage<>2009/01/02(金) 21:43:21 ID:7tH047C60<> 自分でallocを記述しない限りreleaseを気にすることはないないなあ。
allocしてもautoreleaseで勝手にしてちょ状態だし。 <> 787<>sage<>2009/01/02(金) 23:16:09 ID:warDD5wN0<> >>792
補足の説明と資料へのpointerと補足ありがとうございます。Webには日本語版も
あるのですね。いくつか疑問に思っているところについて当たってみたいと思います。

>>793
慣れてしまうとそういうものなのでしょうか。今のところの印象としては常にカウンタの
動きを意識していないと解放してしまっている領域にアクセスしてしまいそうで少し怖い
というのがあります。 <> 名称未設定<><>2009/01/03(土) 01:09:56 ID:W5I29rEl0<> ToolbarのToolbarItemについての質問です。

マックの「全般」もしくは「一般」みたいなイメージアイコンを使用したいのですが、
そういった情報が紹介されているサイトとかご存知の方、ぜひ教えてください。 <> 名称未設定<>sage<>2009/01/03(土) 07:54:36 ID:syVneJlP0<> たしかicons.hだかいうヘッダファイルに定義があったと思う。
違ってたらスマソ <> 名称未設定<>sage<>2009/01/03(土) 10:10:44 ID:eDRVrGAa0<> >>795
IBのLibraryウインドウのMediaで探せばいい。そのアイコンならNSPreferencesGeneralって名前で表示されてるはず。
コードから利用するなら、[NSImage imageNamed: @"NSPreferencesGeneral"]] <> 名称未設定<><>2009/01/03(土) 10:56:55 ID:36pLQ2/L0<> 初めまして。最近cocoaに興味を持ち始めたものなのですが、
旧版の楽しいCocoaプログラミングを読みました。これだけでは
次は詳解objective-Cを読もうと思っているのですが、Cの知識が
足りないのではないかと不安です。気にせず次の本に行ってしまって
構わないか、それともお勧めのCの本があれば教えて下さい
店頭で探したところ、MS-DOSでの操作法を書いたものばかりなので
使い難そうだなと思い、お尋ねしました。よろしくお願いします <> 名称未設定<>sage<>2009/01/03(土) 11:09:53 ID:zpr/dVhB0<> 気にせず進んで、足りないなと思ったらそのとき C の勉強したらいいと思います。
Objective-C で必要な C の知識は、C だけでプログラムする際に必要な C の知識
と重点が異なってくるので、C のためだけの本をまず読んで次に進むというのは
遠回りになると思います。もちろんいろいろ知っていて損はないんだけど。

それよりも、読むだけでなくて、じゃんじゃんサンプルコードを
実際に XCode でプログラムしてみることだと思います。 <> 名称未設定<>sage<>2009/01/03(土) 12:12:04 ID:Y07nrpBw0<> >>796-797
本当にありがとうございます。
明日、直ぐに確認します。

こういうときに手元にmacがないのが悔しいです。
3月に引越しするので、今PCを買うとどうかなと思って買えずにいるんですよ。

今は大学でminiを使っているんですが、proか自分でカスタマイズしたPCにOSをインストールして
これからもmacを使って少しでもObjective-Cの普及に貢献できればと思っています。
<> 名称未設定<>sage<>2009/01/03(土) 12:41:44 ID:5AoBrdvQ0<> >>798
どうしてもCの勉強をしたいなら「やさしいC」がオススメ
他の本と同じくWinを基準にした文章だけど、特に問題ないと思う
自分は大丈夫でした <> 名称未設定<>sage<>2009/01/03(土) 12:54:13 ID:eEQ3v3z20<> >>798
たぶん大丈夫です。Obj-cしばらく使ってからようやくCのポインタ配列とか勉強
しましたし。
逆によほど特殊な場合じゃないと、使わないってことです。 <> 名称未設定<><>2009/01/03(土) 15:47:37 ID:36pLQ2/L0<> >>799
>>801
>>802
解糖ありがとうございます。Cは必要に迫られて、という感じです。教えていただいた本は
ObjCを進めて行き詰まった時にでも読んでみます
サンプルコードを読めということですが、自分はXcodeの使い方がまだ分かっていないのか、
IBとXcodeで書いたファイルがどうつながるのか分かっていないようでアプリが作れない状態です
根本的な所が抜けているようなのでもう少し勉強してみる事にします <> 名称未設定<>sage<>2009/01/03(土) 16:57:04 ID:RLKgqpNV0<> >>800
つMacBook
大学へも持ち運び出来るぞ。 <> 名称未設定<><>2009/01/03(土) 18:35:16 ID:1ihLZGSiP<> 最近は白いやつなら安いしなー <> 名称未設定<>sage<>2009/01/03(土) 18:42:26 ID:QXEUHyuB0<> しかも明日もっと安いの出るかもよー。出ないかもよー。 <> 名称未設定<>sage<>2009/01/03(土) 20:33:29 ID:zpr/dVhB0<> >>803
たのココって XCode を一歩一歩触りながらアプリを作る方法のってないの?
それができないと詳解 Obj-C とか読んでも仕方がないよ。
まずはちいさいアプリでも実際に作れるようになるのが先決です。 <> 名称未設定<>sage<>2009/01/03(土) 22:17:32 ID:I13K2saa0<> やっぱり!とかHMDTとか?
まーどうでもいいや。
まだやる気ないし。

と803とは別の人が呟きました <> 名称未設定<>sage<>2009/01/04(日) 09:22:57 ID:BZdMHx080<> まずはハローワークと電卓、次にアドレス帳。
これくらい目をつぶって組めるようになってから次のステップへ。 <> 名称未設定<>sage<>2009/01/04(日) 09:29:13 ID:xb752OFL0<> >>809
無職に言ってるのか? <> 名称未設定<>sage<>2009/01/04(日) 13:10:37 ID:z8GtUapb0<> printf("職業安定所!"); <> 名称未設定<>sage<>2009/01/04(日) 17:03:25 ID:IYJUQxJt0<> 何か作ってみたいアプリの構想があれば
モチベーションも高まるってもんだ。
<> 名称未設定<>sage<>2009/01/04(日) 18:28:25 ID:X15JVpsT0<> NSWindowの中にNSSplitViewがあり、その中(subviewsの0番目)にNSButtonを配置した場合、
NSButtonのorigin.x,origin.yをNSWindowからの座標に変換したいのですが
どうすればよろしいのでしょうか?

NSButtonをクリックした時にNSButtonの直下にメニューを出したいのですが、
メニューの表示位置を計算したいのです。
NSButtonのorigin.x,origin.yにsuperviewのorigin.x,origin.yを足すという方法で
できましたが、もっと簡単にできそうな気がして。

よろしくおねがいします。 <> 名称未設定<>sage<>2009/01/04(日) 19:10:02 ID:rKUNGzcH0<> 単純にポップアップメニューじゃダメなの? <> 名称未設定<>sage<>2009/01/04(日) 19:45:53 ID:X15JVpsT0<> それでも良いのですが、mail.appのギアメニューの様に格好つけてみたいなと^^)
一応、今はこんな感じでNSButtonがどこのビューの中にあっても計算しています。

NSButtonのサブクラスで
- (void)mouseDown:(NSEvent *)theEvent
{
// ボタンの座標
NSPoint point = NSMakePoint([self frame].origin.x, [self frame].origin.y);

// 親ビューがなくなるまで足し込む
id parentView = [self superview];
while(parentView){
point.x += [parentView frame].origin.x;
point.y += [parentView frame].origin.y;
parentView = [parentView superview];
}

// メニューを出す処理

} <> 名称未設定<>sage<>2009/01/04(日) 19:51:36 ID:KIvKzhm+0<> >>813
- (NSPoint)convertPoint:(NSPoint)aPoint toView:(NSView *)aView
<> 名称未設定<>sage<>2009/01/04(日) 21:25:14 ID:aIp3df6Mi<> 右クリックのイベントを送ってみれば?
<> 名称未設定<>sage<>2009/01/05(月) 00:05:05 ID:tFtDkYn10<> >>815
私はNSPopUpButtonとNSPopUpButtonCellの独自サブクラスを作って、画像を描画するようにしました。
こうすると位置計算もメニューを出す処理も書く必要がないので。 <> 名称未設定<>sage<>2009/01/05(月) 17:58:40 ID:tF97tr6n0<> OS10.5 XCode3.1
アプリを最小化(ウィンドウの黄色いボタンを押す)とドックにアプリがしまわれるのですが
2秒くらいするとふっと無くなってしまう…
なんぞこれ… <> 名称未設定<>sage<>2009/01/05(月) 18:35:28 ID:V0Vz2ggy0<> OS 10.5.6
XCode 3.1.1
だけど、再現しないよ。

変な機能拡張でも入れてるんじゃないの?
<> 名称未設定<>sage<>2009/01/05(月) 18:45:54 ID:tF97tr6n0<> い、入れてるつもりはないんだけどなぁ…
他のアプリは大丈夫だったんだけど、今回のをテスト中に発見してしまって…
普通に作ってるつもりなんだけどなぁ…
ウィンドウは最小サイズが設定してあるくらいで…(設定しなくても結果は同じだったけど) <> 名称未設定<>sage<>2009/01/05(月) 18:50:43 ID:zTUusY0j0<> >>819
要はクラッシュしてるんだからデバッガに接続されるでしょ自動的に。
スタックトレースはどうなってるの? <> 819<><>2009/01/06(火) 10:16:13 ID:CJhYtPzU0<> 遅くなってすいません…
クラッシュはしてないんですよ
アイコンだけがしばらくしたらふっと消えて再表示できないんです。。。
最小化してすぐにアイコン押したら大丈夫なんですけど…w <> 名称未設定<>sage<>2009/01/06(火) 10:49:13 ID:hMNt9Wtt0<> >>823
とりあえずダミーのウインドウを作ってDockに格納してみれば?
それが消えないならプログラム側、
それも消えるようならOS側に問題があると思う。 <> 名称未設定<><>2009/01/06(火) 10:54:15 ID:CJhYtPzU0<> テキストボックスとボタンがあるだけのものを作って最小化しても大丈夫でしたw
プログラム(IB?)の問題なのだろうけど、一体なんなんだw <> 名称未設定<>sage<>2009/01/06(火) 11:01:02 ID:AOo5/KXS0<> よく分からないけど、
その2秒ぐらいしたらドックから自動的に消えてしまうアプリをアップしてみれば・・・・・。

てか見てみたい。 <> 名称未設定<>sage<>2009/01/06(火) 11:10:09 ID:hMNt9Wtt0<> どこかでreleaseしてるんじゃないかな。
コード見直してみれ。 <> 名称未設定<><>2009/01/06(火) 11:19:24 ID:CJhYtPzU0<> 見せてあげたいんだけど、コレはダメなんすよ…

ふむ、releaseか。
ちょっとさがしてみるかな。
3画面あるんだけど、漏れなく消えるw
(1画面毎に次へボタンがある)

ただ、最小化してすぐにアイコン押したら大丈夫なのが気になるんだよなぁ。。。 <> 名称未設定<><>2009/01/06(火) 11:20:18 ID:CJhYtPzU0<> ×:見せてあげたいんだけど
○:見てほしいんだけど

偉そうですんません(´・ω・`) <> 名称未設定<>sage<>2009/01/06(火) 11:20:40 ID:MJRSG4Lp0<> GCオンなのにNSWindowがどこからも参照されてないとかそんなオチじゃないの。 <> 名称未設定<>sage<>2009/01/06(火) 11:24:03 ID:AOo5/KXS0<> ガーベッジコレクションの関係ならそれもありえるんじゃない?

<> 名称未設定<><>2009/01/06(火) 11:33:43 ID:CJhYtPzU0<> ……
GCオフにしたら大丈夫ですた…w
あの…お騒がせしました。。。

>>830さんの言うように
NSWindowがどこからも参照されてない
って可能性があるっつーことか。
ソース見直してみますw <> 名称未設定<>sage<>2009/01/06(火) 12:11:05 ID:y4lhZh9G0<> これは最小化するとNSAppからも切り離されるってことか?
じゃあ、-[NSApplication windows]には最小化されたウインドウは含まれないの、かな?

そもそも陽に持ってるんじゃなくて、何かあるたびにWindow Serverから持ってきてるのかもしれないが。 <> 名称未設定<>sage<>2009/01/06(火) 13:08:07 ID:CJhYtPzU0<> そうなんですよ!!
皆のおかげで原因は分かったんですが、何かスッキリしない…
なんでGC動くんだ。 <> 名称未設定<>sage<>2009/01/06(火) 22:19:00 ID:8agq5WXD0<> なんかawakeFromNibが2回呼ばれるんだが…

なんじゃこりゃ。 <> 835<>sage<>2009/01/06(火) 22:30:40 ID:8agq5WXD0<> 解決。

すげー分かりにくいけど、すげーばかなミスでした。失礼。 <> 名称未設定<>sage<>2009/01/06(火) 23:44:06 ID:mNgBuEAy0<> このスレオススメの「たのしいCocoa」を読んだけど
この本はかなり端折った内容なんだよね?
思ったよりもサラッと読み終わってしまった
次は「詳解 Obj-C 2.0」読んでみるぜ <> 名称未設定<>sage<>2009/01/07(水) 03:14:41 ID:PUe3X3920<> あっそう <> 名称未設定<>sage<>2009/01/07(水) 03:42:22 ID:zw5G2LPC0<> たのここなー。悪くはないんだが、初心者があれを読んでも、載ってるサンプルが作れるようになるだけだよね。やっぱりドキュメント読んで、たくさんコード読んでいくのが一番だ。 <> 名称未設定<>sage<>2009/01/07(水) 09:20:37 ID:qTUD8mWg0<> たのここ初心者にはいいと思うよ
いきなり萩原本とか読んでもつまづくだけだし <> 名称未設定<>sage<>2009/01/07(水) 09:35:22 ID:nkNMGSQi0<> ヒレガス本の10.5対応日本語版が出れば最強 <> 名称未設定<>sage<>2009/01/07(水) 13:29:49 ID:GWYL2Ube0<> >>841
狂おしく同意。
柴田さんとか、自分の本を書くより訳者に回ってくれないかな… <> 名称未設定<>sage<>2009/01/07(水) 18:17:31 ID:HhZ+tLxQ0<> バインディングについて質問です。

Windowに設置したNSTableView ←bind→ Modelで定義したMyTableView

これでMyTableViewで実装した
-(id)init; <> 名称未設定<>sage<>2009/01/07(水) 18:21:21 ID:yaAaH/hI0<> >>843
書きかけだろうけど予測レス
・Bindingの使い方を勘違いしている
・Nibに置いたViewのinitは呼ばれない <> 843<>sage<>2009/01/07(水) 18:23:36 ID:HhZ+tLxQ0<> 申し訳ございません。
途中で書き込んでしまいました。

これでMyTableViewで実装した

-(id)init;  //テーブルのラインナップを整える
- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView;
- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex;

が呼び出されてNSTableViewに描画されるっていうウマーな話を思い描いているのですが、
そんなことは出来るのでしょうか?


本来の目的はMyTableView1とMyTableView2がそれぞれあり、
ボタン一つでNSTableViewとのバインドを切り替えたいのですが・・・・・。

<> 843<>sage<>2009/01/07(水) 18:24:33 ID:HhZ+tLxQ0<> >>844
あーそうか。
そうですよね。

てことは全然的外れなのか。 <> 843<>sage<>2009/01/07(水) 18:27:59 ID:HhZ+tLxQ0<> >>844
バインディングについての使い方が間違っているということですが、

僕のバインディングについて思っていることは
ViewとModelを直接結びつけることができると考えているのですが・・・・

これは全然違いますか? <> 名称未設定<>sage<>2009/01/07(水) 18:37:50 ID:yaAaH/hI0<> >>847
直接結びつけたらMVCにならんでしょ。
そもそも
- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView;
- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex;
これはdataSourceのメソッドでBinding時には使わない。
Bindingはモデルのメソッドを限定しないもの。ただのNSStringがモデルだってかまわない。

そして何故モデルにMyTableView1とかいう名前をつけるんだ。それじゃNSTableViewのサブクラスみたいじゃないか。 <> 名称未設定<>sage<>2009/01/07(水) 18:41:26 ID:GBm8FivP0<> Model A <--bind--> NSTableViewのテーブルカラム(必要な分全部)
Model A <--bind--> MyTableViewのテーブルカラム(必要な分全部)

で両方のテーブルビューはModel Aの内容を表示します。
切り替えはビュー自体をすり替えるだけです。

ただし、Model Aの実装が面倒だと思うので
NSArrayControllerを間に挟むのが普通です。
Model自体が配列である場合は、NSArrayControllerをサブクラス化してそれにあわせる。

<> 名称未設定<>sage<>2009/01/07(水) 18:43:35 ID:HhZ+tLxQ0<> >>848
一応MyTableViewはNSTableViewのサブクラスなんです・・・・。

だから両者をbindすればOKかな・・・・なんて考えた始末です。

手元にマックがないから頭の中で必死に考えた末に思いついたんですが・・
アホですね。 <> 名称未設定<>sage<>2009/01/07(水) 18:44:51 ID:HhZ+tLxQ0<> >>849
それでやっていたんですが、
めんどくさいので、もっと簡単にできるんじゃないのかと・・・・・・。
でもそれでいこうかなと思います。 <> 名称未設定<>sage<>2009/01/07(水) 18:48:15 ID:yaAaH/hI0<> >>850
BindingはView同士を結びつけるものじゃないです。
ModelとViewを結びつけるものです。
二つのViewで表示内容を同じにしたいのなら、共通のModelとBindします。
DataSourceを使うんなら共通のDataSourceを使えばいいです。 <> 名称未設定<>sage<>2009/01/07(水) 18:51:22 ID:yaAaH/hI0<> 勘違いしている人もいるのですが、Cocoa BindingはModelとViewを対等に扱ったりはしません。
ていうかBindingは双方向なんかじゃありません。二つのオブジェクトをシンクロするものじゃないんです。 <> 名称未設定<>sage<>2009/01/07(水) 18:55:00 ID:HhZ+tLxQ0<> >>852
ViewとかModelとかの概念なんですが、

NSTableViewを継承させているMyTableViewでも
Xcodeで記述されているだけならModelだと考えています。
つまりMyTableViewModelと・・・・・・・・

これは大きな間違いでしょうか?

それでViewはIBでWindowに設置したNSTableViewに対してMyTableViewを継承させたときに
MyTableViewがいわゆるViewになるのだと・・・・・。

<> 名称未設定<>sage<>2009/01/07(水) 19:05:08 ID:HhZ+tLxQ0<> >>853
そうなのか・・・・・。
思いっきり勘違いしていますね、僕は。

難しいです、本当に。
バインディングに関するいろんなサンプルを見ても
本当にバラエティに富んでいるんですよね。

だからこんなことも出来るんじゃないかなぁって思って今回ここで聞いてみたんです。
バインディングを勉強すればするほど、次から次へと謎がでてきます。

もう一度リファレンスをしっかり読み直して見ます。
本当に皆様ありがとうございます。

<> 名称未設定<>sage<>2009/01/07(水) 19:23:19 ID:yaAaH/hI0<> >>854,855
確かにNSTableViewだろうがなんだろうがModelにはなりますよ。
けれど、NSTableViewとNSTableViewを、ViewとModelとしてBindして、内容を同一にするなんてことは無理です。
というかやる意味がありません。

そもそも>>845を読んでいて違和感を感じるのですが、まさかNSTableViewに独自の内容を表示させるために
わざわざサブクラス化したりはしていないでしょうね。

BindingはMVCのうちControllerの部分で楽をするためのものであって、Bindingを使う使わないに関わらず
ModelとViewの実装するメソッドが変わるものではありません。
ですからBindingよりむしろ、MVCをちゃんと理解するべきのような気がしますね。 <> 名称未設定<>sage<>2009/01/07(水) 19:28:42 ID:HhZ+tLxQ0<> そもそも>>845を読んでいて違和感を感じるのですが、まさかNSTableViewに独自の内容を表示させるために
わざわざサブクラス化したりはしていないでしょうね。


今回、あくまでもバインディングについての勉強として
サブクラスで独自の内容を表示させるようにさせました。

普段はマウスイベントを使用するためでサブクラスを定義することはしていますが・・・・。
<> 名称未設定<>sage<>2009/01/07(水) 19:32:07 ID:HhZ+tLxQ0<> >>856
ただでも自分でも生兵法でコーディングしていることは認識しております。

.netで階層空間のプログラミングはやってきたのですが、
MVCはまだ始めて3ヶ月と少しぐらいなんで・・・・・・・。

<> 名称未設定<>sage<>2009/01/07(水) 20:37:24 ID:yaAaH/hI0<> >>858
.NETのBindingとCocoaのBindingはこれもまた違いますからね。 <> 名称未設定<>sage<>2009/01/07(水) 21:23:47 ID:ZH+Mi0nG0<> >>848
> 直接結びつけたらMVCにならんでしょ。

どちらかというと、ViewとModelを直接結び付けるのが、本来のMVCです。
間にControllerが入るのはCocoa独自のものです。

ttp://developer.apple.com/jp/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaDesignPatterns/chapter_5_section_4.html


<> 名称未設定<>sage<>2009/01/08(木) 00:55:35 ID:qoiKl4330<> 間にControllerが入ると凝った事はできるけど面倒だよね
Railsみたいにもっと簡単にならないかな

1、モデルクラスを作る。
2、GUIと関連付ける。 ここまでで永続化もサポート
3、必要であればコントローラでチェックなどを行う。
(チェックはモデルで行うべきかもれないけどGUIの制御がメインになるだろうから) <> 名称未設定<>sage<>2009/01/08(木) 03:57:17 ID:0jGZjHE+0<> >>861
ウム。
<> 名称未設定<>sage<>2009/01/08(木) 09:48:41 ID:0jGZjHE+0<> ID:HhZ+tLxQ0さんのレスを読む限りから推察すると
KVO,KVCの個々の知識に関しては、基礎的なところは理解されていると思います。

でもそこからcocoa bindingに持っていくところであやふやになっているんだと思います。

例としてNSTableViewのカラムとNSArrayControllerのバインディングについて考えてみましょう。

NSArrayControlerはその名前の通り、controllerの集合を持つことが出来るcontrollerです。
controllerとは、あるクラスを実体化した具現物つまりオブジェクトですよね。

で、NSArrayControllerにadd:でデフォルトで追加されていくオブジェクトとは
NSMutableDictionaryなんです。(これはsetObjectClass:で変更することができます。)

IBでのインスペクタを確認していただければ、ClassでNSMutableDictionaryとなっているはずです。
さらにそこを見たいただくと、Keyという項目があります。
この項目に各カラムに対応するkeyを作成し、
各カラムの所で、各々keyと対応してNSArrayControllerとbindingすることにより、
NSArrayControllerにadd:を送信するたびに
上記で作成したキーをもつNSDictionaryがNSArrayControllerに追加され
NSTableViewに項目が追加されていくってわけです。


<> 名称未設定<>sage<>2009/01/08(木) 09:51:56 ID:0jGZjHE+0<> すみません。
>>863で、
>controllerとは、あるクラスを実体化した具現物つまりオブジェクトですよね

と言いましたが、Objective-Cではクラス自体オブジェクトと考えるので、
NSArrayControllerに追加されていくオブジェクトとはこちらの方ですね。

申し訳ございません。
<> 名称未設定<>sage<>2009/01/08(木) 10:11:04 ID:0jGZjHE+0<> >>791
こっちへ移動してください。
http://pc11.2ch.net/test/read.cgi/mac/1224960170/ <> 名称未設定<>sage<>2009/01/08(木) 10:15:44 ID:0jGZjHE+0<> >>865は誤爆です。
申し訳ございません。
さて791さん。

このサイトをdeallocを直接呼び出してはいけないその理由は下記のサイトを読んでいただければ
分かると思いますが、
http://en.wikibooks.org/wiki/Programming:Cocoa/Objective-C_basics#Defining_initializer_and_deallocator

端的に言えば、releaseする際に勝手に呼ばれるという理由だったと思います。 <> 名称未設定<>sage<>2009/01/08(木) 10:28:28 ID:Ge4+MYY90<> >>866
わざわざありがとうございます。

基本的に retain, release の組み合わせで使用するのであって、
dealloc は呼ばず、このメソッドはインスタンス変数を解放するため
だけにオーバーライドして使う、という様な位置づけでしょうかね。
だいたい分かってきました。

ついでに質問なのですが、IBOutlet 系の記述をインスタンス変数に
していたとして、これは既に retain されていると考えていいのでしょうか?
それともイニシャライザなどで retain する必要がありますか? <> 名称未設定<><>2009/01/08(木) 11:52:32 ID:OLJocZWN0<> >>863-864
神様と呼んでいいでしょうか?

なるほどー。
いまいちNSArrayControllerについて掴めていなかったんです。
う〜ん、分かりやすい解説本当にありがとうございます。
この予備知識をもとにもう一度、Controller関係のリファレンスを読み直して見ます。

>>866ですが、
deallocはそのインスタンス変数がどこからも参照されなくなったときに
勝手に呼び出されるメソッドです。

>>867ですが、大体にして正しい認識だと思います。
例えば、あるクラスでdeallocをオーバーライドします。
そのクラスがどこからも参照されないつまり、retaincountが0になった際、
オーバーライドしたdeallocが呼び出され、その際にそのクラスが保持しているインスタンス変数を
明示的にreleaseしておきます。

そうしておけば、そのインスタンス変数の参照カウンタを−1してくれるというわけです。

後、質問ですが・・
>IBOutlet 系の記述をインスタンス変数に
していたとして、これは既に retain されていると考えていいのでしょうか?

そんなことを考えたことがないのですが、自分で明示的にreleaseしてみたらいかがでしょうか?
ただWindow上から参照されているんじゃないんですか?よく分からないですけど・・・(大阪人風に)


<> 名称未設定<>sage<>2009/01/08(木) 12:25:17 ID:sI11vY5U0<> 新しい柴田本。誰か買うかな、誰も買わないかな? 一応、情報求む。

作って楽しい!無償ではじめられるCocoaアプリ開発 Xcodeプログラミング大全 (MacPeople Books)
ttp://www.amazon.co.jp/gp/product/4048676075/ref=pe_2102_11225132_pe_snp_075 <> 名称未設定<>sage<>2009/01/08(木) 12:32:10 ID:Sg9pArN50<> >>869
“無償で”と言うなら本を無料にしろ、と思った。 <> 名称未設定<>sage<>2009/01/08(木) 13:21:41 ID:btDFxywG0<> >>867
> ついでに質問なのですが、IBOutlet 系の記述をインスタンス変数に

ttp://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemMgmtNibObjects.html#//apple_ref/doc/uid/TP40004998

ttp://www.cocoabuilder.com/archive/message/cocoa/2008/11/18/222878 <> 名称未設定<>sage<>2009/01/08(木) 14:56:37 ID:Ge4+MYY90<> >>871
@property で retain を指定していれば release しなければいけない
のは分かるのですが、IB で作ったクラスは普通アクセサまでは定義
されていないですよね?

この場合はどうなるのでしょうか… <> 名称未設定<>sage<>2009/01/08(木) 15:00:31 ID:Ge4+MYY90<> あ、すいません、レスが何個か続いてるんですね。
もう少し読んでみます。 <> 名称未設定<>sage<>2009/01/08(木) 15:20:53 ID:Ge4+MYY90<> >>871
メーリスを読んでみると、やはり release しろと言っている様ですね。

あと下記の様なコードを書いて実験してみました。

(1)
IBOutlet UITextField *field1;

まず、これに適当な UITextField を結びつけると retainCount は2
でした。さらに、

(2)
IBOutlet UITextField *field1;
IBOutlet UITextField *field2;

として、(1) で結びつけたのと同じ UITextField に結びつけると
retainCount は3になりましたので、やはり release はすべきだって
事なんでしょうね。 <> 名称未設定<><>2009/01/08(木) 17:01:10 ID:OLJocZWN0<> でもさぁ
AppControllerのIBOutletのインスタンス変数をreleaseしてしまうと
IBでコネクトしたtextFieldの値を取ってこれなくなるよ。

そんなことする必要は実践上ではありえないですよね。

そういったIBOutletを宣言しているインスタンス変数は
アプリケーション終了と同時に開放されるんだから、
アプリケーション実行中にわざわざ開放する必要はないわけですから。 <> 名称未設定<>sage<>2009/01/08(木) 17:10:39 ID:ClLk7fAY0<> 何この流れ…
アウトレットをreleaseとかしませんよ。
もしView同士がアウトレットをお互いに接続していて、アウトレットをretainしているなら、
立派なメモリーリークの完成でしょ。

ただしNSObjectControllerのcontentアウトレットを接続すると、勝手にsetContentされてretainされるけど。 <> 名称未設定<><>2009/01/08(木) 17:48:51 ID:OLJocZWN0<> >>876
まぁ多分参照カウンタの勉強中なんだと思われ。
GCを使えば、releaseは意識しなくなるんだけどね。
<> 874<>sage<>2009/01/08(木) 18:09:24 ID:Ge4+MYY90<> ??

なんでですか?

IBOutlet に接続した段階で retainCount が一つ増えているのに、
何故 release しないんですか?

ちょっと誤解があるのかもしれませんが、何も接続していない状態
でもカウントは1なんですから、IBOutlet から参照されなくなった時点
で release してもカウントが2から1に戻るだけだと思うんですが…。 <> 名称未設定<>sage<>2009/01/08(木) 18:20:44 ID:ClLk7fAY0<> >>878
そりゃ@property使ってるからじゃないの。
普通IBOutletに@propertyなんか使わないけど。iPhoneだと使うわけ? <> 名称未設定<>sage<>2009/01/08(木) 18:23:59 ID:JxaWu1aX0<> GCは予備くらいに考えて、
自分で管理した方がいいと思うけど… <> 名称未設定<>sage<>2009/01/08(木) 18:42:06 ID:eQdSAwLm0<> >>878
自分で alloc copy retain したもの以外は無視する。
のが、正しい管理方法です。
で、そういう風にドキュメントで明言されています。

もし仮に、retainCountが増えるのがバグであったとすれば、
Appleはそれを当然黙って直すでしょう。直した後に変更したよ!って言うだろうけど。
で、上の管理にしたがっているアプリには何も問題が生じない。
したがっていなかった場合は、何かが起こる可能性が非常に高い。

あなたは、それでも retainCountにこだわりますか?

これ -- ドキュメント沿わなかったため、突然不具合が生じる -- は、
この場面以外にも起こりえることですよ。
<> 名称未設定<>sage<>2009/01/08(木) 18:42:18 ID:xlI+OYgT0<> パフォーマンス考えなきゃGCで良いと思うが。 <> 名称未設定<><>2009/01/08(木) 18:48:23 ID:OLJocZWN0<> 僕の場合
IBOutlet NSTextField* textField;

- (void)awakeFromNib
{
[textField setIntValue:[textField retainCount]];
}
こいつの結果は7でした。いろんなところから参照されているんでしょうね。

で、次に明示的にreleaseしてみます。
- (IBAction)releaseTextField
{
[textField release];
[textField setIntValue:[textField retainCount]];//こいつの結果は1
}
releaseTextを2回呼ぶとメモリーリークを引き起こしました。
当たり前ですけど・・・・・・。

ただ最初は7でreleaseすると1になるってどういうことなんでしょうね?


}
<> 名称未設定<>sage<>2009/01/08(木) 18:54:10 ID:1ht1kdmT0<> >>883
> ただ最初は7でreleaseすると1になるってどういうことなんでしょうね?

ようするにawakeFromNibのタイミングでは、7だった。ということじゃ? <> 名称未設定<>sage<>2009/01/08(木) 18:58:12 ID:Qm5mTMX+0<> 僕の場合、

NSLog(@"ageてもいいけどなるべくsageてね"); <> 名称未設定<>sage<>2009/01/08(木) 18:59:46 ID:ClLk7fAY0<> >>883
自分のコード以外にも様々なオブジェクトがretainしたりreleaseしたりautoreleaseしたりしているというのを忘れてはいけない。
awakeFromNibのタイミングではおそらくnibを読み込んだ後AutoreleasePoolがまだ解放されてない。

ちゃんとInstrumentsやなんかで見ればいいだけの話。普段どうやってメモリーリークのチェックしてんの?
あとメモリーリークってのはちゃんとメモリを解放しないことであって、過剰にreleaseすることではない。 <> 名称未設定<><>2009/01/08(木) 19:02:07 ID:OLJocZWN0<> >>884
それは分かるんですけど・・・・・・。
ただ当然参照カウンタは1だろうなと思っていただけに「?」です。
それにreleaseしたのに1残っているのも気になりません?

まぁIBOutletを明示的にreleaseするなんてことは僕はやりませんけどね。 <> 名称未設定<><>2009/01/08(木) 19:05:56 ID:OLJocZWN0<> >>886
そうですね。
メモリーリークの使い方が違います。すみません。

<> 874<>sage<>2009/01/08(木) 19:15:06 ID:MmQKyqNZ0<> >>879
@property は使ってないです。

>>881
「自分で alloc copy retain したもの以外は無視する。」ってのは
単純明快でいいですね! その考えでいこうと思います。

なので IBOutlet についてはほっとく事にします。
どうせ開いてる間は dealloc される事はないんでしょうし、
みなさん release していなくてもリークは起きていないんでしょうし。
そういう考えですよね。

他に(仕様とは言え)知らぬ間にカウントが増えてそうなのは
@property の retain くらいでしょうか?
いつも気を付けている点などお教え頂けると助かります。 <> 名称未設定<><>2009/01/08(木) 19:25:22 ID:OLJocZWN0<> >>881が全てじゃない。 <> 名称未設定<>sage<>2009/01/08(木) 19:38:03 ID:ClLk7fAY0<> >>889
>>881はOwnership Policyっていう基本中の基本なんで。
http://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/Concepts/ObjectOwnership.html <> 名称未設定<>sage<>2009/01/08(木) 20:03:35 ID:sI11vY5U0<> >>890
あなたのいっている事は正しいが、>874 を混乱させる気がする。

>>874
知らぬ間にカウントが増える?のでよく使われるようなインスタンス、例えば
NSNumber *hoge = [[NSNumber alloc] initWithBool:YES];
NSNumber *piyo = [NSNumber numberWithBool];
なんかは、hoge == piyo で YES が返ってくるし、retainCount もいっぱい。
release しても減らないので、シングルトンになっていたりする。

あとは、NSArrayやNSDictionary などに登録すると勝手にretainが送られる。
ArrayやDicを開放するときに個別にreleaseする必要があるかといえば、そうではなく
Array, Dic にreleaseを送ると勝手に中身にもreleaseが送られる。

だから、release対象は基本的には alloc, retain, copy のみ。例外はあるが、それは
後々学べば良いと思う。 <> 名称未設定<>sage<>2009/01/08(木) 20:05:50 ID:wPFlxuiD0<> retainCountなんて気にするべきでない。Cocoaで定められたルールに従ってプログラムを書けば良い。 <> 名称未設定<>sage<>2009/01/08(木) 20:13:46 ID:sI11vY5U0<> あ、>892 だが間違った。
×Array や Dic に release を送ると勝手に…
○Array やDic が dealloc されると勝手に… <> 名称未設定<>sage<>2009/01/08(木) 21:04:40 ID:HCepVkRQ0<> >>889
>みなさん release していなくてもリークは起きていないんでしょうし。
>そういう考えですよね。
そうではなくて、自分が所有権をもってないオブジェクトは
release したら「ダメ」なんです。
いろいろあげられてるページをよんで勉強したほうがいいと思いますが、
まとめておくと、retain/release/autorelease メカニズムというのは、
各オブジェクトに対して所有権をもっている「人」
(Cocoa のフレームワークの他の場所だったり、
読み込まれてるNib ファイルだったり、あなただったりしますが)
が retain することで retainCount が増えて、
いろんなひとが release して最終的に retainCount がゼロになったら
だれもそのオブジェクトを持ってないことになるので、
そこで自動的に dealloc が呼ばれるという仕組みになってるわけです。

874 さんはあなた以外の Cocoa フレームワークが、
あなたの触っているオブジェクトを
retain することがあるというのを認識したほうがいいとおもいます。
>ただ当然参照カウンタは1だろうなと思っていただけに「?」です。
>それにreleaseしたのに1残っているのも気になりません?
というのがおかしいということです。 <> 名称未設定<><>2009/01/08(木) 21:35:30 ID:OLJocZWN0<> >>895
いわれなくても分かってるよ。
まぁやるまでは1だと思ってたけどさぁ。
いろんなところから参照されているんだろうなってことは
結果で分かったよ。
<> 名称未設定<>sage<>2009/01/08(木) 22:35:30 ID:Sg9pArN50<> この豹変ぶり <> 874<>sage<>2009/01/09(金) 01:06:41 ID:Dd+2WhY50<> >>892
ありがとうございます。

>>895
ちょっと表現が悪かったです。

IBOutlet のせいでカウンタは増えますが、それは自分が retain したもの
ではないし、リークは起こっていないだろうから自分が release すべき
ものではないと判断した、という意味です。

やはりオーナーといいつつ結局カウントされてるだけなのはちょっと
不便と言うか…分かりにくいと言うか…。 <> 名称未設定<>sage<>2009/01/09(金) 01:26:30 ID:l9JHXxJ60<> 何が判りにくいのか判らん。

1. 長期間保持しないといけないものは所有権を主張しないといけない。
2. alloc / copy / retain によって所有権が発生する。
3. 所有権がいらなくなったら release する。

これを全ての人 (プログラムしてる自分と、
Cocoa ライブラリを書いた Apple の技術者)
が全て守ってたら、自動的に全員が所有権を放棄した時点で
retain count がゼロになって、dealloc されるわけでしょ。

>やはりオーナーといいつつ結局カウントされてるだけなのはちょっと
>不便と言うか…分かりにくいと言うか…。
ひとつのオブジェクトを保持出来るのが一人だけだったら
判りやすいのにということ??
<> 名称未設定<>sage<>2009/01/09(金) 01:35:24 ID:/x/ASYWh0<> まずはちゃんとドキュメント読まずに思い込みでコード書くのをやめないと。 <> 874<>sage<>2009/01/09(金) 01:44:59 ID:Dd+2WhY50<> >>899
その理屈は分かります。

ただ、IBOutlet を配置した時点で retainCount が一つ増えている事実に
対して、release を自分以外の誰かがきちんと呼んでいるという保証が
欲しかっただけです。

今は、自分が retain していないんだから他の誰かの責任なんだろう、
という理解で落ち着こうとしていますが…。

>ひとつのオブジェクトを保持出来るのが一人だけだったら
>判りやすいのにということ??
ある retain を呼んだオーナーを逆探知?できたらいいのにな、と
思いました。今は数値としてのカウントだけしかないからできませんよね? <> 名称未設定<>sage<>2009/01/09(金) 01:52:14 ID:0pBZGpT40<> >>901
IBOutletによる参照と、retainCountの増減に因果関係はないと思いますよ。参照を持ってるクラスがretainしない限りは。
もし参照しただけでretainされるなら、循環参照しただけでそのオブジェクトたちは解放されないことになるでしょう。
また自分自身を参照したらそのオブジェクトは解放されないことになりますが。そのような設計をすると思います? <> 874<>sage<>2009/01/09(金) 01:59:32 ID:Dd+2WhY50<> >>902
いえいえ、さすがに参照を格納した時点で勝手に retain されているとは
思っていないです。格納した後に明示的に retain しているんだとは思い
ますが、それをちゃんと release しているのかどうかが気になりました。

今更ですがやっとみなさんが言っている意味が分かってきた気がします。
クラス変数とは言え、自分で alloc した訳ではないから release する
必要はないって事ですよね。

インスタンス変数は自分で解放する必要がある、ってキーワードに振り回されて
た気がします。インスタンス変数の中で、自分で alloc などしたものは dealloc
メソッドをオーバーライドして release すべき、それ以外は release しない、
つまりそういう事ですよね? <> 名称未設定<>sage<>2009/01/09(金) 02:06:32 ID:0pBZGpT40<> >>903
そうです。自分がretainかcopyかalloc/initしたもの以外はreleaseしない、というのが原則ですね。 <> 名称未設定<>sage<>2009/01/09(金) 04:03:55 ID:YNAUuz7D0<> >>897
>>896は別人w。 <> 名称未設定<>sage<>2009/01/09(金) 05:48:36 ID:YNAUuz7D0<> 874さんは、ある段階から結構伸びていくタイプですね。
ただ挫折するタイプでもあるんです。気をつけてください。

>>868さん、
僕は神様的なレベルじゃないです。

GCに頼りすぎているせいか
現に管理カウンタ方式によるメモリー管理は、かなり怪しいところもあります。

まぁallocしたやつは、儀式のようにreleaseしてますけど・・・・・・。
参照カウンタとか意識したこと無いです・・・・・。

<> 名称未設定<>sage<>2009/01/09(金) 17:57:34 ID:8GY6ok/A0<> ADCに有る、Cocoaセミナーのレパ対応版資料を見たが
初心者が勉強するなら、これだけで充分だな
たのCocoなんていらなかったんや! <> 名称未設定<>sage<>2009/01/09(金) 20:33:02 ID:BtnEJOVs0<> またすぐそういう極論を言う。
本には本の良さがあるよ。 <> 名称未設定<>sage<>2009/01/09(金) 20:52:56 ID:Rsd8WitQ0<> autoreleaseって怖くね?
油断しているといつの間にか解放されるんでしょ。 <> 名称未設定<>sage<>2009/01/09(金) 21:07:01 ID:xStOCSoZ0<> 油断しなければいいだけの話だ <> 名称未設定<>sage<>2009/01/09(金) 21:11:38 ID:BtnEJOVs0<> 俺の背後には立つな <> 名称未設定<><>2009/01/09(金) 21:12:29 ID:bMk2YxZl0<> >>907
それも見て、たのCOcoも読んで、ヒレガスも半分くらいやったのに
未だにアウトレットが分からない俺はそろそろ挫折しそう <> 名称未設定<>sage<>2009/01/09(金) 21:17:34 ID:GyYeJ94n0<> 単なるポインタじゃないですか。 <> 名称未設定<>sage<>2009/01/09(金) 21:30:19 ID:6OsmI+IL0<> 勉強し始めの頃、Cocoaはやたら気持ち悪かった。
とりあえずIBでウインドウつくって、何か数行書いたらそれなりに動く。

動くんだけど、なんでそれで動くのかがさっぱり分からない。昔ToolBoxを齧った
ことがあったから、逆にイベント処理も何もしないのにボタンが反応してメニュー
も動作するというのがえらく不気味だった。

今は慣れた。アウトレットも慣れるよ。 <> 名称未設定<>sage<>2009/01/09(金) 21:37:21 ID:8GY6ok/A0<> >>908
いや、マジでいらないと思ってるわけじゃないんで
すいませんでした
本も大切ですよね

>>914
分かるわぁ
なんていうか、自分がちゃんと理解してるか不安になる
知らなくちゃいけないことを飛ばしてるような気がしてくる <> 名称未設定<>sage<>2009/01/09(金) 22:30:40 ID:Pt57QXE80<> NEXTSTEPプログラミングの本でそれだと最初何が起こっているのかわからないから
全部ソースでウインドウから何から出す例から始まってその後 Interface Builder を
使って意味を理解するというのがあったよ
僕はその本で入門したから実にスムーズだった <> 名称未設定<><>2009/01/09(金) 22:35:04 ID:bMk2YxZl0<> >>916
タイトル教えて! <> 名称未設定<>sage<>2009/01/09(金) 22:35:25 ID:9OE+nkWi0<> >>906
オブジェクトプールと手動参照カウントなんて20年前の手法だから、GC使えるなら
そっち使えば良いよ。
NeXTSTEP当時はCとの互換やマシンパワーの関係でこの実装しかできなかった
化石仕様だから。あえて拘る必要も無い。 <> 名称未設定<>sage<>2009/01/09(金) 22:36:06 ID:VLWY2O3M0<> よくわからん。C が出来た直後も、
printf("...") とやるだけで、アセンブラでいろいろ書かなくても
文字が表示されるのが気持ち悪い、何が起こってるのかわからない。
コンパイルされた実行ファイルのアセンブリコードを読んで
はじめて意味が分かった。といった人が多かったのでは ?

それといろいろかかなくても GUI が動くというのの違いは
単に程度問題だと思うのだが。 <> 名称未設定<>sage<>2009/01/09(金) 22:41:52 ID:VLWY2O3M0<> >>918
retain/release メカニズムは OpenStep 仕様策定に伴って
NSObject とともに導入されたので、NeXTStep 1.0 とかの
Object クラスはもっと原始的だったきがする。

あと iPhone は GC つかえないんよね。 <> 名称未設定<>sage<>2009/01/09(金) 22:47:25 ID:Pt57QXE80<> >>917
http://www.amazon.co.jp/NEXTSTEPプログラミング―オブジェクト指向プログラミング入門-アレックス・D-ニェム/dp/4931356079
たぶんこれだったと思うけどちょっと今正確かどうか保証できない
後日でよければ確かめて書き込んどくけど <> 名称未設定<>sage<>2009/01/10(土) 00:10:08 ID:uvf0UZtR0<> >>919
>コンパイルされた実行ファイルのアセンブリコードを読んで
>はじめて意味が分かった。といった人が多かったのでは ?

マジレスすると単に call printf してるだけだろうからそれではまだ意味が分からんと思うけど。
じゃあ libc 部分をディスアセンブルですか?
で頑張った挙げ句、一つの到達点は「ソフトウェア割り込みをする」だと思うが、さてそれで
分かった気になれるのかなあ。掘り方が足りない?

(あ、ちなみに今は割り込みじゃなくて sysenter かも) <> 名称未設定<>sage<>2009/01/10(土) 01:47:28 ID:TP6njaty0<> IBは言語が複雑になったHyperCardってところでしょうか。 <> 名称未設定<>sage<>2009/01/10(土) 02:33:38 ID:o+cTwXnw0<> >>923
私が思うに全然違いますね。
IBやCocoaはあくまで、C言語+オブジェクト指向を理解している人には簡単です。
理解していない人には、手順は簡単でも何が起きているのかさっぱり分からない。

例えばCocoa Bindingを使えばHyperCardより書くコードを少なくしつつ同等の機能を実現出来ますが、
初心者が処理の内容をイメージしやすいのはHyperCardのほうでしょう。
HyperCardに相当するものが無くなったのは本当に惜しい。 <> 名称未設定<>sage<>2009/01/10(土) 02:49:29 ID:K35gM2cR0<> そんな年齢がばれちゃう様な会話は、外では出来ません。(≧ε≦) <> 名称未設定<>sage<>2009/01/10(土) 02:56:05 ID:6LAx8ouX0<> AutomatorにGUI拡張がついたものがあればイメージとしては近いか?>HyperCard

HyperCardとOpenDocはなくなったことが惜しまれる2大技術だよな。

と思いっきり年齢がバレるような会話をしてみた。 <> 名称未設定<>sage<>2009/01/10(土) 03:49:19 ID:R6paoEyt0<> よーし、おじさんmagicってコマンド入れちゃうぞ! <> 名称未設定<>sage<>2009/01/10(土) 05:01:09 ID:TP6njaty0<> >>927
夕食に食べた焼肉フイタ <> 名称未設定<>sage<>2009/01/10(土) 05:06:19 ID:TP6njaty0<> でもさぁ。

HyperTalkやってて今cocoaやってて、って、だいたいどこの誰だか
察しがつく気がするんだけども…。

みんな実は知り合いなんじゃないですか? <> 名称未設定<>sage<>2009/01/10(土) 12:12:39 ID:iJgNObLj0<> OpenDocは惜しい技術だった。開発コードはリリバンド?だったっけ?
開発バージョンのデモを見た時はスゲーと思ったけど、製品になって
出てみるとかなり退化してたのでガッカリした。

HyperCardねぇ・・・Ver.1.0.0をMac Plusで使った時の印象が悪くて
結局最後まで好きになれなかった。rolodexだもんなぁ。 <> 名称未設定<><>2009/01/10(土) 12:19:30 ID:b1IDWYDF0<> OpenDoc も、CyberDog も、X 何とかなんとか いう検索情報の3D的ブラウズ手法のでもとか
面白いの色々あった。 <> 名称未設定<>sage<>2009/01/10(土) 15:21:05 ID:H8pV9z5i0<> モモデーラーズブランドとかチバレイとか
懐かしい単語がワラワラ出てくる。

そういや何時だったかCocoaっていう
オーサリングツールもどきも、あったっけ。
<> 名称未設定<><>2009/01/10(土) 15:56:26 ID:aY7xpBek0<> >>932
>あったっけ

だんだんスレの中身が「apple苦難の時代を懐かしむスレ」
にちかづきつつあるな
<> 名称未設定<>sage<>2009/01/10(土) 16:37:40 ID:cql5/Y0h0<> コードウォーリアの頃は恐れおおくてMacでのプログラミングに手が出せなかった。
高かったし。
Xcodeで敷居が低くなって始めたよ。 <> 名称未設定<>sage<>2009/01/10(土) 16:49:01 ID:4yK0RIPG0<> >>934
FutureBASICを使え <> 名称未設定<>sage<>2009/01/10(土) 17:46:22 ID:Zc741NJa0<> つttp://4toc.com/fb/index.htm
5.1.3まで出ているな。 <> 名称未設定<>sage<>2009/01/10(土) 18:03:31 ID:SJikL2Yl0<> みなさん詳しいですね
自分はMacBook買ったらタダでXcodeが付いてきたんで
なんとなく勉強始めたっていう輩なんで
プログラミングの歴史はチンプンカンプンです <> 名称未設定<>sage<>2009/01/10(土) 18:26:02 ID:U/4SUMVX0<> OgreKitのLeopard PPC版がなんとか動いた
makeルールをleopardに合わせて書き換えればいいだけだった <> 名称未設定<>sage<>2009/01/10(土) 18:53:58 ID:lw+k6dKB0<> 俺だったら素直にboostのRegexpを使うなぁ
標準で正規表現ができないのが問題だよ <> 名称未設定<>sage<>2009/01/10(土) 19:05:26 ID:/z0IkXwh0<> 正規表現あたりのクラスって
アップルは追加しないのかな? <> 名称未設定<>sage<>2009/01/10(土) 19:07:30 ID:U/4SUMVX0<> >>939
俺も標準でないのはさすがにどうかと思ってる。 <> 名称未設定<>sage<>2009/01/10(土) 19:15:52 ID:xkFZ49sz0<> >>932
名前を変えて残ってるよ。
ttp://www.stagecast.com <> 名称未設定<>sage<>2009/01/10(土) 19:24:32 ID:pK5oi2pH0<> >>934
お年玉ためてコードウォーリアーのアカデミック買ったらXCode発表。

かなり窪んで10.4ぐらいまでプログラムやめてたw <> 名称未設定<>sage<>2009/01/10(土) 19:35:08 ID:8yg1wzhW0<> 50のおっさんばっかりでがっかり。 <> 名称未設定<>sage<>2009/01/10(土) 19:59:25 ID:SJikL2Yl0<> 私女だけど、男は50からだと思う <> 名称未設定<><>2009/01/10(土) 20:04:35 ID:/v6TyET/0<> >>945
証拠うp! <> 名称未設定<>sage<>2009/01/10(土) 20:20:50 ID:BM7xz4Jq0<> プライベートメソッドなんかの引数で
fp8とかfp12とかいう表記を見かけますが、fpってどういう意味でしょう?何かの略称でしょうか? <> 名称未設定<>sage<>2009/01/10(土) 21:45:56 ID:TP6njaty0<> >>945
言い方が違うんじゃないの?

「ねだって金を吸い取れるのは50から」

じゃないの? <> 名称未設定<>sage<>2009/01/10(土) 22:41:09 ID:6LAx8ouX0<> 今Apple Confidential引っ張りだしてきて思い出したけどPowerPC移行時にAppleは当初開発ツールの開発をSymantecにRainbowというコード名で依頼していたんだったな。
Symantec PowerMac tools featured in new subscription CD-ROM release.
http://www.allbusiness.com/technology/computer-software/485557-1.html <> 名称未設定<>sage<>2009/01/10(土) 23:33:04 ID:rL1nMuQ/0<> 漢字トークもHyperCardもOpenDocも使った高3が通りますよ。


NSObject * hoge = [[[NSObject new] autorelease] retain];
メモリ管理?なにそれおいしいの? <> 名称未設定<>sage<>2009/01/10(土) 23:35:58 ID:TP6njaty0<> new? <> 名称未設定<>sage<>2009/01/10(土) 23:37:01 ID:Vr/Y4GdZ0<> >>950
これはひどい <> 名称未設定<>sage<>2009/01/10(土) 23:54:15 ID:cMo5rYNx0<> NSObjectのインスタンスを作るという発想は新鮮だな。
何にも使えないけど。 <> 名称未設定<>sage<>2009/01/11(日) 00:02:40 ID:sYslBzIH0<> それ以前に autorelease] retain] はnoopだろ。
悪いこと言わないから>>950 はGCのお世話になっときな。 <> 名称未設定<>sage<>2009/01/11(日) 00:16:30 ID:liED/MGr0<> 冗談が通じないスレですね^^ <> 名称未設定<>sage<>2009/01/11(日) 00:34:24 ID:ZIEuSZzQ0<> まさかの冗談宣言 <> 名称未設定<><>2009/01/11(日) 00:41:08 ID:VT7VaHiEP<> >>916
荻原本で簡易画像ビューアをIBなしで作ってるよ。
IBで作り直してるかどうかは忘れたけど。 <> 名称未設定<>sage<>2009/01/11(日) 01:36:00 ID:Sbnu5PyN0<> そうそうSYMANTEC C++ だったー。 <> 名称未設定<>sage<>2009/01/11(日) 02:36:16 ID:RHR/Lyrf0<> >>957
その本持ってるー
丁寧に解説されてるんだけどREALbasic止まりなオレには
やっぱりわかりにくいっすorz

>>932
モモデラゆうと>>935とスーパカの代理店だったとこか。
いまFutureBASICいうとカッパラボでもStazでもなくFB2Cなんだよね

>>934,943
そこでMPWっすよ。
ビギナーには向いてないけどナーorz <> 名称未設定<>sage<>2009/01/11(日) 11:21:32 ID:5+kPkzqm0<> モモデラはModEになった後つぶれたんだっけ? <> 名称未設定<><>2009/01/11(日) 14:03:19 ID:ODo4a9iK0<> Apple謹製の『Cocoaアプリケーションチュートリアル』
ttp://developer.apple.com/jp/Documentation/Cocoa/Conceptual/ObjCTutorial/ObjCTutorial.pdf
をやっているのですが、チュートリアル通りに進まない点があるので教えてください。

チュートリアルの
p.47 nibファイルにConverterControllerクラスを追加する
というセクションで、p.48からの手順に

1. 「File」>「Read Class Files」を選びます。
2. ConverterController.hファイルを選択して「開く」をクリックします。
3. ライブラリで、オブジェクト項目をMainMenu.nibウインドウへドラッグします。

というふうに説明がされてあり、図5-3には
新しくインスタンス化されたConverterControllerのインスタンス
がMainMenu.nibに追加されている様子が紹介されています。

しかし、2.の操作をしたのに、ConverterControllerのインスタンスがMainMenu.nibに現れません。
そのため、先に進むことができません。
どなたかお助けを。
なおバージョンはLeopardです。
<> 名称未設定<>sage<>2009/01/11(日) 14:13:32 ID:7jqDutqf0<> >>961
それもううんざりするぐらい見慣れた質問。

ファイルリストのところにMainMenu.nibがあるから、それダブルクリックして呼び出して。

<> 名称未設定<>sage<>2009/01/11(日) 14:16:07 ID:7jqDutqf0<> >>961
ごめん質問間違えた・・・・otz

ライブラリーにある青い箱をドロップアンドドラック <> 名称未設定<><>2009/01/11(日) 14:24:31 ID:aGmK15Ub0<> Xcode3.0からの変更点だっけ?
「Xcode 3.0 インスタンス化」とかでぐぐれば出るのに <> 名称未設定<>sage<>2009/01/11(日) 15:16:12 ID:ODo4a9iK0<> >>964
ありがとうございます。でてきました。

ttp://kakkasoyo.blogspot.com/2008/01/xcode-2x3.html
【Xcode 3】
Interface Builderの「ライブラリ」ウィンドウにあるNSObject(青いキューブ)をnibウィンドウにドラッグ&ドロップする。
そうするとnibウィンドウに「Object」という名前で追加されるので、これを選択する。メニューから[Tools]→[Identity Inspector]を選択(もしくはコマンド+6)するとObject Identityウィンドウが表示されるので、
Class Identityの部分に名前(例えばAppController)と入れて確定すると、Objectの名前が変わる。


<> 名称未設定<>sage<>2009/01/11(日) 18:57:06 ID:pZea1df00<> QTKitを使って動画からサウンドトラックを抜き出して保存するアプリを自作しているのですが、
AIFFしか作れなくて困っています。

QTmovie *movie = 〜ファイルパスから作成

NSDictionary *attr = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], QTMovieExport,
[NSNumber numberWithLong:kQTFileTypeAIFF], QTMovieExportType,
[NSNumber numberWithLong:SoundMediaType], QTMovieExportManufacturer,
nil
];

[movie writeToFile:[@"~/Desktop/aaa.aiff" stringByExpandingTildeInPath] withAttributes:attr];

一発でAACに変換、エクスポートする方法はないでしょうか?
(上記で一時的にAIFFファイルを作成して再読み込み->上記のパラメタを変えた形でMP4で保存という
ローテクな方法なら思いついたのですが) <> 名称未設定<>sage<>2009/01/11(日) 19:23:34 ID:nzMkLOKV0<> >>947
バイナリをクラックしてプライベートメソッドの存在を調べるとき、メソッドの引数の変数のタイプは
わかるのだが、変数名は実際のヘッダーやソースがないからわからんので、便宜的に変数名を
付けているというか。

fp の略? なんだろ。field parameter とかなんとか? しらん。class-dump の中の人に聞くべしw

後ろの 8 とか 12 とかは、Objective-C のメソッドの低レベルな詳細に関係がある。よい子はそんなこと
知らなくてもいいんだが、プライベートメソッド云々やってる時点でもうよい子じゃないなw
木下氏が以下で解説している。
http://journal.mycom.co.jp/column/objc/020/index.html <> 名称未設定<>sage<>2009/01/11(日) 19:32:42 ID:kfqvxSyw0<> >>967
うわああこれ読んでみましたけど木下氏すご過ぎですね
情報サンクスです <> 名称未設定<>sage<>2009/01/11(日) 19:57:12 ID:FuXovhSx0<> OgreKit使うのやめた
理由は実装に怪しいところがかなりあるのが最大の理由、次にメンテナンスされておらず放置プレイな所。

結局boost::regexpをラップするクラス作って終了。
特にどうということもなく使えるのは助かる。 <> 名称未設定<>sage<>2009/01/11(日) 20:20:07 ID:Sbnu5PyN0<> file pointer で使ってたな C ではね。>fp <> 名称未設定<>sage<>2009/01/11(日) 20:32:01 ID:zPckJlu/0<> >>967
fp=frame pointerでしょ。
local stack frameを示すレジスタ経由でアクセスする際のオフセットを示してる。 <> 名称未設定<>sage<>2009/01/11(日) 21:27:18 ID:sYslBzIH0<> >>969
RegexKitとというのがあってだな。俺はこれを使っている。 <> 名称未設定<>sage<>2009/01/11(日) 23:23:24 ID:nzMkLOKV0<> >>971
まあそーかもしれんなーと最初ちょっと思ったがちょっと深読みしてみたのだったw
例えば今 Intel Mac 上で ObjC のメソッドをチェックすると第一引数は fp8 と出るが
実際には 16(%ebp) だし、それをそのまま frame pointer からのオフセットと言っていいのかとか。
あとこのエンコーディングは構造体にも適用するよね、とか。
でも今見たら構造体の場合要素は _field1 とか表示するのかw

ま、どうでもいいねw <> 名称未設定<>sage<>2009/01/11(日) 23:57:56 ID:liED/MGr0<> >>966
kQTFileTypeAIFFを他のファイルタイプにするだけじゃダメ?



fp…function pointer? <> 名称未設定<>sage<>2009/01/12(月) 23:04:59 ID:RUX9yHMv0<> >>966
QTKitはあまりしらないけど、QTPlayerProで変換する方法は
mp4で書き出すを選択して
videoはなし、audioはAACか、そのままを選んで、拡張子をm4aにすれば変換できます。
拡張子をm4aにすれば、iTunesに取り込む時に便利です。
<> 名称未設定<>sage<>2009/01/12(月) 23:20:24 ID:vXex9itW0<> >>966
Cocoaですらないけど

tell application "QuickTime Player"
activate
export document 1 to "/適当な保存パス/export.m4a" as iTunes using default settings
end tell

とかをアプリケーション化した方が早くないか? <> 名称未設定<>sage<>2009/01/12(月) 23:40:47 ID:+pmYHhCA0<> >>919
マジレスすると初期のCコンパイラはバイナリではなく、アセンブラソースを
吐いた。

まあ、Objective-CコンパイラもバイナリではなくCソースを吐いたがね。
<> 名称未設定<>sage<>2009/01/13(火) 00:00:47 ID:XA9bEvhQ0<> >>975
プログラミングのスレで何やってるの <> 名称未設定<>sage<>2009/01/13(火) 00:10:46 ID:X8Fw6Fwq0<> >>966です。
>>974
kQTFileTypeMP4もあるのですが、動画部分もあればエクスポートされてしまいます。
>>975さんの言うような、内部的にビデオトラックを削除してエクスポートすれば行けそうなのですが、
QTTrackの削除方法がわからず。
>>976さんのようにappleScriptでもいいのですが、ドロップして一括とか、変換設定もできたら
いいなとcocoa化にチャレンジしています。
<> 名称未設定<>sage<>2009/01/13(火) 00:21:25 ID:rzo4bgLj0<> >>979
AppleScript でドロップレットすりゃあええやん……

激しくスレチスマソ <> 名称未設定<>sage<>2009/01/13(火) 01:08:14 ID:X8Fw6Fwq0<> >>980
まあそうなんですけどね。
調べたら意外とあっさり行けました。

// QTMovieからサウンドトラックのみをエクスポートする。
NSArray *tracks = [movie tracks];
int i;
for(i = 0; i < [tracks count]; i++){
// QTMediaTypeSound以外のQTTrackを無効にする
if([[[tracks objectAtIndex:i] media] attributeForKey:QTMediaTypeAttribute] != QTMediaTypeSound){
[[tracks objectAtIndex:i] setEnabled:NO];
}
}
あとは>>966のコードを組み合わせて書き出し。

ただ、これだと44.1KHz/ 128kbps固定なのであとは調べます。
いろいろヒントありがとうございました。 <> 名称未設定<><>2009/01/13(火) 02:17:50 ID:XVq5hGo60<> 自作アプリから別のアプリにメソッドを実行させたり、もしくはキーコマンドを送ったりはできますか?(⌘Dなど)
AppleScriptだとかなり制限があるので他にそういった方法はないのかなと思いまして。 <> 名称未設定<>sage<>2009/01/13(火) 03:42:23 ID:+jGRHSnD0<> 任意のオブジェクトをさわるっていうのはセキュリティ上の問題もあるしなかなかむずいだろ。キー入力を送るぐらいはインプットマネージャ書けばできるとおもうけど。 <> 名称未設定<>sage<>2009/01/13(火) 04:03:59 ID:H0hDNQK00<> AppleEventかInputManagerハック <> 名称未設定<><>2009/01/13(火) 09:15:22 ID:OaO9RHfv0<> ui部品の初期化として
あちこちからawakeFromNibを呼び起こしているのですが・・・・
問題ありですか?

initだと駄目だから苦肉の策かなと思っているのですが。 <> 名称未設定<>sage<>2009/01/13(火) 09:29:06 ID:BGIuO9i10<> >>985
nibで初期化されるオブジェクトはinitではなくinitWithCoderを使う。 <> 名称未設定<>sage<>2009/01/13(火) 09:40:51 ID:Odul5VRs0<> >あちこちからawakeFromNibを呼び起こしているのですが・・
あちこちからって、意味が分からないのですが。
1つの部品のawakeFromNibをそんなに何回も呼ぶのか? <> 名称未設定<><>2009/01/13(火) 09:45:49 ID:OaO9RHfv0<> >>986
無事解決しました。

この辺のAPIはノータッチできたので、これから少しリファレンスを読んで調べてみます。

本当にありがとうございます。 <> 名称未設定<>sage<>2009/01/13(火) 10:19:13 ID:BGIuO9i10<> >>987
つ ttp://www013.upp.so-net.ne.jp/tanken/Tanken/no4_PitfallOfNib.html <> 名称未設定<>sage<>2009/01/13(火) 10:57:57 ID:f46B+cww0<> >>989
ごく当たり前のことだが、つまづく人は結構いそうだね。
事例の場合は、複数回呼ばれないと困ることもあるから
複数回呼ばれるのは正しい動作だと思うけど。 <> 名称未設定<>sage<>2009/01/13(火) 11:14:43 ID:Czh9gure0<> あちこちからと言う表現がプログラミングスレには不適切かと。 <> 名称未設定<>sage<>2009/01/13(火) 11:21:32 ID:BGIuO9i10<> 表現厨があらわれた <> 名称未設定<>sage<>2009/01/13(火) 12:29:40 ID:XVq5hGo60<> >>983, 984
ありがとうございます、調べてみます <> 名称未設定<>sage<>2009/01/13(火) 15:19:25 ID:YqDA0fDL0<> NSFileHandle使ってreadlineのコード書いてたら単純そうでなかなか面倒だった
readline位は実装しててほすぃ <> 名称未設定<>sage<>2009/01/13(火) 18:26:48 ID:oXhyJ1WE0<> 一喝して読み込んで改行で配列にしてまわす。 <> 名称未設定<>sage<>2009/01/13(火) 18:53:06 ID:+jGRHSnD0<> >>994
これでいけるんじゃね?
ttp://forum.soft32.com/mac/scan-large-text-file-line-line-Cocoaftopic-46033-days0-orderasc-15.html <> 名称未設定<>sage<>2009/01/13(火) 18:58:18 ID:8r7GE9ie0<> 「なめんなよ!」と蹴りを入れて喝を入れることから始める <> 名称未設定<>sage<>2009/01/13(火) 20:01:44 ID:YqDA0fDL0<> >>996
もう動いてるからいいんだけど、その方法でもいいな。 <> 名称未設定<>sage<>2009/01/13(火) 22:28:58 ID:TtNlCCCM0<> 新スレ

Cocoaはさっぱり!!! version.12
http://pc11.2ch.net/test/read.cgi/mac/1231853172/ <> 名称未設定<>sage<>2009/01/13(火) 22:41:09 ID:JOSXnRSV0<> [Cocoaはさっぱり!!! version.11 release]; <> 1001<><>Over 1000 Thread<> このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。 <>