- 初心者は教えてくれる方への感謝を忘れずに。
上級者も初心者だった頃の気持ちを忘れずに。
前スレ
Cocoaはさっぱり!!! version.4
http://pc7.2ch.net/test/read.cgi/mac/1091927026/
- 2
- NS乙
- DLKey それは不思議な呪文
DLkey それは幸せの鍵
すべては小さな言葉、余計な飾りも取り払って!
真実はそこにある
さあ、行こう、次の世界に
みんなが待っている
Next!
- >>4
我が家の家宝にしました。
前スレの大昔のNeXTの記事も補完希望です。
h)ttp://k-kura.net/upload/src/k-kura.net0294.zip
- dlkeyはメール欄に入れとけよハゲ
- Objective-Cの記事あげてくれた人ありがとう。
007.jpgぐらいからワケわかんなくなってきた。
- NeXTCubeでもNeXTでもだめじゃん
おっさんども教えろボケが
糞ジジイなんか台風でずぶぬれのままLaox Mac館開店セールの行列並んでるうちに老衰で死ぬがいい
- >>8
アヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャッ!
- 何も考えずに全部小文字で入れたら行けました。
ヒントたくさんあったのに、みんな考えすぎなのさ。
- >>10
イケメンありがとうイケメン
>>9
台風一過の炎天下で干からびて氏ね
今のお前はまるでイケショップのようだ
- 本家AppleのDownloads->Development Tools->Final Engine
Cocoaフレームワーク丸ごと入ってるよ。。。
あそこって、本当になーんもチェックしとらんのねぇ。。。
- >>12
ひどいなこりゃw
framework2個ずつ入ってるし、中間ファイルも掃除してないし
・frameworkをプロジェクトに加えるときにコピーする設定で追加してしまった
・ソース公開したいがよく分かっていないのですごいことになってしまった
といったところか
- macでゲームみたいのを作るにしても
一度win環境のCを通過した方がいいかなあ
グラフィック処理的な事やらの資料が少ないんで
- まるで別物だし。
- MacでゲームっていうとOpenGLという選択肢があるんだっけ。それなら
そっち方面で進めていけばいいんじゃないだろうか。やりようによっては
WindowsでもMacでも同じソースでアプリケーションが動くんじゃない?
- ゲーム“みたいの”には、
Cg(C for graphics) by NVIDIA の環境を通過した方がいい
- >>16
同じソースかは知らないが、洞窟物語とかwinのゲームが移植されたりはしてる。
- OpenGLっぽいのだとtsumikiとか
- クロスプラットフォームがいいならSDLなんかもあるわな
- NSPopupButtonに説明用に選択できない灰色の項目を追加したいのですが、IBでやりかたはありませんか?
いちいちsetEnabled:するしかないでしょうか
選択してすぐなにかをするわけではないのでactionは接続してないです
- ヒレガス本で勉強中です。
p.59に、「多くのクラスには自動解放オブジェクトを返す
クラス・メソッドが用意されています。」と書いてあるの
ですが、どのクラス・メソッドが自動解放オブジェクトを
返すのか、どうやって判断すればいいのでしょうか?
- 自分でallocしてinitあるいはinitWith...で初期化したオブジェクトは解放する必要がある
例:[[NSString alloc] initWithString:@""] ->解放必要
allocしないで「クラス名+なんとか」で確保したオブジェクトは自動解放がかかっている
例:[NSString stringWithString:@""] ->解放不要
- へー、なるほど。そうだったんだ。
- >>23 さん、ありがとうございました。
- 第4回
ターゲット/アクションパラダイム(1) - 動的特性を利用したデザインパターン
http://pcweb.mycom.co.jp/column/objc/004/
- >>25
ヒレガス本にも書いてあったはずだけど?
- >>27
すみません、p.59の「releaseに関する規則」に
書いてありました。もっとちゃんと読めばよかった...orz
- 現在、ファイルの作成日を変更するアプリを作成しています。
root権限がないと、作成日を変更出来ないファイルもあるので
Authorization APIを使ってroot権限でターミナルコマンドのtouchコマンドを
呼んでいます。
つまり、root権限で 「touch -c -t YYMMDDhhmm.ss filePath」(YYMMDDhhmm.ss
は年月日時分秒の数字の文字列)
を行う作戦です。
プログラムの概要は以下のとおり
const char* arguments[5];
arguments[0] = "-c";
arguments[1] = "-t";
arguments[2] = "YYMMDDhhmm.ss";
arguments[3] = filePath;
arguments[4] = nil;
status = AuthorizationExecuteWithPrivileges (
authorization, "usr/bin/touch", kAuthorizationFlagDefaults,
(const * char *)arguments, nil
);
この処理を行うと、ファイルの最終更新日は変更されても
ファイルの作成日は変更されません。
この方法では作成日の変更は出来ないのでしょうか?
またもっと便利な方法があるのでしょうか?
ご存知の方がいらっしゃれば、教えていただけると幸いです。
宜しくお願いいたします。
- マルチ乙です。
それと、なんで作成日変更する必要あんの?
- アリバイ工作とみた
- たぶん既に作成日変更アプリはある。
あとコマンド使うならSetFile。
んで骨格はむしろAppleScriptでいいだろ。
- >>29
POSIXにはファイル作成日という概念は無いよ。存在しない物は変えられない。
FSSetCatalogInfoを呼び出すコマンドを作ってAuthorizationExecすべし。
VFSのレイヤまで降りてsetattrlistを使っても出来るけどローレベル過ぎて
お勧めできない。
>>32
SetFileが存在するとは限らない。
- applescript
- >>29
いい加減マルチ止めろ。
SetFile使わない方法は
>>33で答え貰ってるだろ。
- >>30~>>35
アドバイスありがとうございました。
社内ではMac開発は1人で、納期が明後日ということで
ワラをもすがる気持ちでマルチで質問してしまいました。
申し訳ありませんでした。
- >>36
まあ、ここは2chだからどうでもいいけど、
他のところにはちゃんと、結果を報告すること。
どのように解決したのか、まで書くのがMLに参加するものの礼儀。
と書いたところで、2度とこんなことろ読まないだろうけどね。
# 最近は ML でも過去ログ読まない(読めない)人ばっかりだから
# 情報が累積されてもあんまり意味ないともいえる。<結果の報告
- あらまー。どっかのMLにもポストしてたの。
>>37
freeML使ってるとコマンドで過去ログが取り寄せられなくて
しょぼーん。
>>36
どうでもいいけど範囲指定でアンカーつける時は
>>最初の数字-終わりの数字
っていう風に、半角のマイナスで数字をつないでね。
- >>36
今頃言っても遅いかもしれんが、UFS等にはファイル作成日は無いから作成日に
依存するようなソフトを書いちゃうと特定の環境でしか動かんよ。
社内システムとかで環境限定なら良いけどね。
- >>36
今頃言っても遅いかもしれんが、死ね
- すみません
- 何度も見たことがあるけど、「死ね」はひどいな。
- >>41
こんなトコで謝んなくても良いから、解決したんなら
自己解決した旨マルチ先に報告しといたら?
- >>29>>36>>41
おいおい、お前がトロいからMLにもレス付いちゃってるじゃねーか。氏ねよ
- Sさんはとんだ無駄手間だったな
ちゃんと謝っとけよ
- 仕事でくむなら、ADCのセレクト以上の会員になって、
ちゃんとしたサポートを受けた方がよいと思う。
- 色々検索しても分からなかったので教えて下さい。
下のサイトなどで HTMLをNSTextViewに貼り付けるという方法が出てますが、
どうしても画像を貼り付けることができません。画像部分が黒いブランクか、紫のアイコン
に化けてしまいます。(絶対アドレスでも相対アドレスでも。)
フォームの要素はコピーされます(RTFDで保存すると画像としてきちんと残る)。
また、NSTextViewに直接画像(または画像付HTML)をコピペすることもできます。
初心者なので肝心なことが抜けてるのでしょうか。。。
ttp://homepage2.nifty.com/hoshi-takanori/cocoa-browser/prog-tips-j.html#textview-html
ttp://cocoa.mamasam.com/COCOADEV/2002/09/2/45884.php
- 多くのアドバイスを頂きましてありがとうございました。
MLの方にも書き込みをしたのですが、
以下の方法で、なんとか解決できそうです。
やはり、FSSetCatalogInfoでcreateDateを変更するアプリを
作成し、AuthorizationのAPIを呼び出すことで
ファイルの作成日を変更することができました。
また、AppleScriptの方は作成日を取得出来るけれども
変更は出来ない?と思いましたので、その手法はとりませんでした。
多くの助言をいただきまして、本当にありがとうございました。
- >>47
"Graphics Allowed"にチェック入ってます?
- "Graphics Allowed"にチェック、入ってます。
コードは全く同じなので、問題があるとしたらそういうインターフェース関係かな
とは思うのですが……。
- 問題の解決にはなってないんだけど、10.3以上なら
NSAttributedString *attrStr;
NSDictionary *opt;
NSURL *pageURL;
pageURL = [NSURL URLWithString:@"http://www.apple.com/"];
opt = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:1]
forKey:@"UseWebKit"];
attrStr = [[[NSAttributedString alloc] initWithHTML:[pageURL resourceDataUsingCache:NO]
options:opt
documentAttributes:nil] autorelease];
[[textView textStorage] setAttributedString:attrStr];
こんな感じで逝けますたよ。
- >>51 で出来ました! ありがとうございます!
- NSImageViewのインスタンスでinitをオーバーライドしたんですが
どうやらinitが呼ばれていないようなんです。
初期化はどこに書けばいいんでしょうか?
- >>53
Nibファイルの中でインスタンス化してない?
Nibでインスタンス化するとinitは呼ばれないよ
HMDTに説明があったような気がするから探してみ
- >>53 >>54
いやinitはもともと呼ばれない。NSViewのサブクラスで呼ばれるのは
- (id)initWithFrame:(NSRect)frameRect
で、Nibで作っても自前のviewでは呼ばれる、ということだったと思う。
- >>55
NSImageViewはinitWithFrame呼ばれてなくない?
- カスタマイズスレでこちらに誘導してくださったので、質問させてください。
XRGのグラフの位置を固定したいのです。ソースコードの書き換えによって
可能だと教わったのですが、こういう難しそうなことには無縁な私には
どうすればいいのかさっぱりです。どなたか教えていただけませんでしょうか。
- まずXcodeをインストールしなさい
Xcodeでぐぐったらどうゲットするのかすぐわかります
無料です
- >>53-56
file:///Developer/ADC%20Reference%20Library/documentation/Cocoa/Conceptual/LoadingResources/Concepts/NibFileLoaded.html
- やっぱプログラマの人は参考サイト丸ごと落としてるのか
- >>59のことか?
Xcodeをインストールすればあると思うが
- はあ?なにいってんの
- >>60 の言っていることが分からんのだが。
どういう脈絡で出てきたレスなんだ?
- >>59をftpのURLと勘違いしたんだろ
- いや、>>60は
「"ADC Reference Library"をADCのサイトからDLしてDeveloperフォルダに入れてるのか」
って言いたいんじゃないのか?
俺、Xcodeインストール済みだけどADC Reference Libraryなんてないし。
- >>47自己レス。webViewに既に表示されているHTMLを貼り付けるのであれば、下により可能。
[[textView textStorage] setAttributedString:
[ [[[webView mainFrame] frameView] documentView] attributedString]];
昔より簡単になったけど、初心者向けの資料が少なくて、依然めんどいですね。
- >>58
入ってます
- >>65
一緒にインストールされましたが
- >>65
インストールの際にドキュメント(600MBくらいあるやつ)のチェックを外したんじゃないの?
- >>68-69
「Documentation」ってフォルダはあるんだけど・・・
インストーラのチェックを外した覚えはないしフォルダ名を変更した覚えもないんだけどな…
- Xcode Toolsのバージョンによってもフォルダ変わってた鴨
- うちはDocumentationじゃなくてADC Reference Libraryのフォルダに入ってる
- NSNetService&NSNetServiceBrowserを使ってネットワーク間通信をするのと
NSConnectionを使用してネットワーク間通信する違いってなんでしょう…?
Bonjour(Rendezvous)共有のネットワーク通信については
NSConnectionだけ使用して通信ってのはダメなんでしょうか。
たとえば、以下のようなコードを書いてもBonjour共有では
クライアント・サーバプログラムとして機能しないんでしょうか?
【サーバ】
NSConnection *theConnection = [NSConnection defaultConnection];
[theConnection setRootObject:self];
[theConnection registerName:@"MyServer"];
【クライアント】
id proxy = [
[NSConnection rootProxyForConnectionWithRegisteredName:@"MyServer"
host:@""]
retain];
[proxy setProtocolForProxy:@protocol(MyProtocol)];
[proxy hogeMethod];
初歩的な質問で申し訳ありませんが
ご存知の方、教えて頂けると幸いです。
- 昨日の書き込みからずっと調べているのですが、全くわかりません…
レスが無いようですので、すみませんがメーリングリストの方に質問してみます。
- >>74
レスがないのはあんんたが何をしたいのか意味不明なため
- 久しぶりに Macosx-dev-MLで笑わせて貰ったよ。
# シロタン ナイス!
- 素敵だな
- あの人はいつも俺たちの期待を裏切らないよ
- >>76
何がおかしいんですか?
ちゃんと説明してください。
悪意のある書き込みは気分が悪いです。
- >>79仕方ないよ、2ちゃんなんだから(´・ω・`)
- >79
というか、76はメーリングリストの話をしているのだが。
漏れはそのML入ってないから分からんけどおまいさんはそのMLでも同じ質問をして
「シロタン」なる人に何らかの返答をもらったのか?
そうでなければおまいさんの質問と76の発言は何の関係もないぞ。
……で肝心の質問の答えだが漏れには分からぬスマソorz
- 面白いけど、うんざりもする。
- >>81
そうです、返答をもらいました。
彼の返答は、私の勉強不足を暗に嘲笑する箇所もありますが
丁寧なアドバイスに感謝しています。
でもMLのやりとりを見て第三者があざ笑うようなことに
私は気分を害しているのです。
- >83
ああ、74にMLのこと書いてたな。
じゃ言えることは一つだ。マルチすんなクソが回線切って首(ry
- >>84
別に幼稚で乱暴な発言はいいんですけど、
私はちゃんとMLで質問すると断りを入れていますよね。
断りなくして、MLで質問するならばマルチと言われても
仕方がないと思いますが、ちゃんと断りをいれているのに
何でも一辺倒にマルチというのは、考え方がおかしいんじゃないですか?
- 気持ちはわかるし、あなたは正しいがここは2ちゃんだ。
>>76みたいな発言はスルーしとく、これもまた正しい道。
- 華麗にスルー
- 質問をスルーしといて良かったと思った
- 自分の行動が見えていない精神病患者が沸いているようだな。
- 主張していることは正しいが、質問はトンチンカン
- >>83
そうね。
常識人にみえるけど、現時点のプログラムの能力ゼロ。
あのレベルでMLに投稿されるのは、普通は迷惑かな。
気分を害する前に己の無力を恥じて、力がついてから帰ってきて。
- MLの趣旨から外れてる訳でもないから
別に迷惑でも無いと思うけどな。
- >>91
そういう事言ってるからMLが寂れちゃうんだと思う
あそこすごく質問しにくくなったよ
- >>92
彼の投稿がスルーされてれば迷惑は感じなかったかも。
シロタンの返しが強烈すぎて、うんざりした。
>>93
それもそうだね。
初心者用のMLが別にあるわけでも無いし。
- よく見るとこの質問って答えられたんだなあ。
今回の件に関しては、やっぱり最初の質問の段階でたたかれるオーラを出してた
と思うな。何したいのか、というのを言わずにいきなり一部の人にしかわからな
そうな用語を連発してた割に、最後は「初歩的な質問で云々」だし。けっこう
礼儀に気を使ってたと思うけど、逆にそれがいやみったらしさを出してたんじゃ
ないかな。だいたい、Rendezvousなんて使ってない人が大半なのはちょっと
考えればわかるだろうしね。本当に自分で自分のことを「初心者」だと思って
いたのか、ちょっと疑問だ。
質問するなら、まず初心者云々のくだりはいらないし、質問もNSNetService
とかいきなり言わない方がいいと思う。まず何をしたいのかを簡単に説明して
(詳細に説明しなくてもいいけど、読者のほとんどが読めるくらいがいいかな)、
そのあと「Cocoaの分散オブジェクトを使うと、[NSConnection registerName:]
で宣言したサービスを[NSConnection rootProxyForConnectionWithRegisteredName:]
で検索できるようですが、これはBonjourの代わりにならないのでしょうか」
くらいにしとけばよかったかもしれないね。まあなかなか難しくて普段自分も
出来ているとは言えないんだけど。
…もう遅いかな。
- なげー
- MLみてない人もいるかもしらんから、答えのほうを勝手にまとめとくな。
・Bonjour(Rendezvous)はそのサービスを提供する/参加する相手を探すための仕組み
・Bonjourの機能をNSNetServiceで利用できる
・個々のアプリケーションレベルの通信は、NSNetServiceは提供しない。相手を見つけるだけ。
なので、NSConnection(とか)を利用して実装する。
質問に対する回答だけつければ、
「73の目的の実装をするには、NSNetServiceとNSConnectionの両方を利用する必要がある」
まちがいとかあれば指摘よろ。
- DockExtraとMenuExtraの違いを教えてください
- つーかMenu Extraの作り方を教えてください。
ステータスバー嫌い。
- >>99
http://www.cocoadevcentral.com/articles/000078.php
- >>100
ありがとうございます。
英語苦手だけど頑張って読んでみるよ
- ところで、DockExtraって何?
- >>102
10.3 になって無かったことにされますた。
- Thx.
お下がりiBookで10.3から使い始めたもんで・・・。
- Dockのアプリアイコンを長押し(右クリック)した時に出るメニューの事かと思った。
- SystemUIにまだ残ってる>DockExtra
-
- 「SafariStand」というSafariのプラグイン
(http://hetima.com/safari/stand.html)
の説明に、
「Safariの機能を強化するInputManager形式のBundleです」と
書かれているのですが、このInputManager形式のBundleって
ご存知の方いらっしゃいますか?
これってSafari以外にも使えるプラグインの技術なんでしょうか?
- 作者に聞く
- >>108
すべてのCocoaアプリケーションで使える。
ttp://developer.apple.com/documentation/Cocoa/Conceptual/InputManager/
ttp://www.cocoadev.com/index.pl?InputManager
(両方とも英語)
もともとは、かな漢字変換とかのテキスト入力用のモジュールを利用するための仕組み
だったんだけど、この仕組みを応用して、すきなCocoaアプリケーションにローダブル
モジュールをロードさせることができる。
するとどうなるかっていうと、自分の書いたモジュールのコードが対象のアプリに
含まれているかのような動作になる。対象のアプリのソースを自分がもっていなくても、
動作を変えたり、機能を追加したりすることができるわけ。
ただし、対象のアプリを解析しないといけない場合も多いから、たぶんそっちの方が
プラグインをつくることそのものより大変だと思う。
mkino氏のMYCOM PC WEBの連載で扱うみたいなので、そのうち日本語でも読めるはず。
ttp://homepage.mac.com/mkino2/backnumber/2005_08.html#August%2011_1
- つづき。InputManagerでメンドイこと。
InputManagerは す べ て のCocoaアプリでロードされてしまう。
捨てるときは、こんな手順でやらないとダメ。
(1)プラグインファイルをInputManagersの外に移動
(2)すべてのCocoaアプリを終了-ログオフするのが手っ取り早い
(3)ゴミ箱に捨てる
プラグインをバージョンアップするときも、ロードされたファイルの上書きはできないので注意。
SafariStandでは、ローダとプラグイン本体に分けることでこれを解決してる。
だからSafariを終了するだけでプラグインの入れ替えができるはず。
同じようなアプローチとしてSIMBLてのがある。
ttp://culater.net/software/SIMBL/SIMBL.php
ソース見られるのでくわしくはコード読んでくれ。
- >>111
詳しい情報、どうもありがとうございます。
ことえりのようなインプットメソッドを
実現する技術なわけですね。
すべてのCocoaアプリにロードされちゃうのは
痛いですね。
アプリの開発もさることながら、アップデータ等の
パッチを当てるのも工夫が必要みたいですね…。
でも面白そうなので、テストアプリを作成してみようと思います。
情報、どうもありがとうございました。
- そんなすごいものだったのか。
今一ソフトが揃わないから実感無かった。
- わざわざ対象を解析した上で本来の仕組みとは全然違う使い方をしてまで
動作に食い込ませる訳だから、そりゃよっぽどの動機が無いと無理だからな。
すごいってか、ある意味セコいやり方だし。
- 最近のiTunes等で採用されているウインドウのスタイルについて
教えてください。
手動でNSWindowを生成する時は、initWithContentRect のstyleMaskに
NSUnifiedTitleAndToolbarWindowMask を設定すればOKそうだんだけど
InterfaceBuilderではどうやって設定すればいいんですか?
InterfaceBuilderとXcodeで開発すると、色々な制限がありそうだけど、
慣れればなんでもできるものなのかなぁ。
InterfaceBuilderからソースコードを生成するツールがあれば最高なのに。
- インスペクタ -> Unified title/toolbar look
- >>116
あちゃー、見逃していました。ありがとうございます。
ちょっと話は変わりますが、
InterfaceBuilderからソースコードを生成するツールを
作ったら使う人いると思う?
- >>117
絶対いない。
- >>118
そうなんだー。
Cocoaを理解し易くなると思うけどなぁ。
- GNUStepでも使えるコードを吐いてくれるなら需要はありそうだけど。
- >>119
動的結合を重視。
っていうか、例えばボタンの大きさ変えるために毎回ソースを吐かせるの?
それとも、数字がいっぱいのソースとにらめっこするの?
- >>121
ビュー用のCocoaオブジェクトクラスを自動生成し、
ユーザはそのクラスを継承して実装するって感じ。
InterfaceBuilderでサイズの変更やオブジェクトの追加した時も、
ビュー用のクラスが更新されることになる。
そのビューの値を変更したい時は、サブクラス上で行うから
ビューのクラスが自動更新されても問題は少ない。
例)setAction でクリックイベントの設定もサブクラス上で行う。
自動生成のコードは、
NSWindowの生成から始まって、NSButton等をコードで作成し、
プロパティもコード上で設定するってのはどう?
- カスタムクラスを使うのとどう違うんだろう……
- >>122
NSTableViewなど個々のviewへの対応、Bindingの対応、
Core Dataの対応、ローカライズの対応。などなど。
恐ろしく労力がいると思います。
- メリットは?
- >>122
前からIBでサブクラスの読み込み/書き出しは出来るんでは。
これ(Custom Class)とは違うの?
それより、IB上で貼ったNSButtonの内部cellのサブクラス化って簡単にできないの?
- NSTableView もコードで生成すると、NSScrollViewとの関係が良くわかる
ので様々な応用が可能だと思うよ。InterfaceBuilderだけだと、内部構造
がどのようになっているか理解するのに時間がかかるし。(最初だけかもしれないけど)
Binding部分もコードで書いた方が汎用性を持たせる事も出来るからいいんでは?(規模によるけど)
確かにCoreDataはコードで表現できるのかわからないですね。。。
ローカライズは今のような管理はできないな。。。
でもねー、人のソースを見て動作を追うときにはコードの方がいいなぁ。
- >>125
メリットはInerfaceBuilderを使わなくても開発できる。(デメリットでもある笑)
(いまでもできるが、InerfaceBuilderから吐かれたソースを流用して画面設計できる)
>>126
同じようなものですけど、InerfaceBuilderで作成したオブジェクトのコードが見える為、
プロパティの設定値などをソースコードで追える。
ん、もしかしておいらはInterfaceBuilderのすばらしさを理解できていないのかな?...
- もうそんなに頑張らなくても良いよ
思いつくメリットとしてはnibファイルを抜きにすることで
ユーザーにやたらにいじられることが無くなるってことくらいかなあ
別に俺はいじられても全然構わないんだけどね
- 学習目的みたいな事ではないのか。
- IBがNSWindowをサブクラス化してその中で
オブジェクトを配置していると勘違いしている悪寒。
- >>128
>プロパティの設定値などをソースコードで追える
うん、それは思ったことがある。
細かく制御したいときは、IBを使わないでウィンドウ作成からビュー内部まですべてコード
で書くしかないね。
規模にもよるけど、IBは簡単なダイアログくらいにしてさ。
- >>129
そうかー、今は勝手にいじられるんだよね。
その点、勝手にローカライズしてもられるメリットもあるかも。
>>130
学習にもなると思うよ。
InterfaceBuilderでプロパティを設定しても、そのプロパティを動的に
変更したい時にはメソッドを調べなきゃならないけど、コードが生成
されていればそれを参考にできるしね。
>>131
ちょっと違うけど、そんな感じのものを実現したいんだ。
>>132
だよねー。
UIが複雑なものは、VIEWとCONTROLは自力で書かないと、
バインディングでの制御とコードでの制御がごっちゃになってしまうよね。
- InerfaceBuilderにソースを吐かせたいとは思わないけど、nibファイルが編集の容易なテキスト形式だったらとは思う。
xmlのように可読性や差分取得に問題のあるフォーマットでは無く、YAMLやDelphiのテキスト形式フォームのような単純な形式で。
- PackegeMakerでインストーラーを作成しているんですが、
インストーラー起動直後に、シリアルナンバーを入力する
ダイアログを表示したいのですが、参考となるドキュメントページが
見つかりません。
たぶんスクリプトを書くことになると思うのですが
どうやって自前のシリアルチェックダイアログを
実装すればよいのでしょうか?
ご存知の方いらっしゃいましたら、よろしくお願いします。
- NSOutlineViewでドラッグ&ドロップやりたいんだけど、
-outlineView:validateDrop:proposedItem:proposedChildIndex
には、NSTableViewの
tableView:validateDrop:proposedRow:proposedDropOperation:
のNSTableViewDropOperationみたいな、列の上にドロップされたか
列の間にドロップされたか判断する情報がないみたい。
これって、他に判断する方法あんの?
- >>136
列の上だとindexが-1になるけど
それが正しい判断方法なのかは自信が無い
- >>137
それで合ってるが定数を使うべき
NSOutlineView.h
enum { NSOutlineViewDropOnItemIndex = -1 };
// May be used as a valid childIndex of a drop target item.
//In this case, the drop will happen directly on the target item.
- あ、なるほど。簡単な解決法なんだね。ありがとう>>137>>138
- >>138
俺も勉強になった
サンクス
- >>135
Tiger以降ならInstaller plugin作る。
- >>119
いっとくけど遅くなるよ。
Nib ファイルには既にIBでの設定値で生成されたボタンやウィンドウといったオブジェクトが
アーカイブされているので、アプリの起動時(Nibのロード時)はそれを単にメモリに展開して
いるだけ。ソースコードにしたらアプリの起動時に毎回毎回初期化処理から全部やらないけ
なくなる。独自の View (==UI)を作りたい場合も、そのためにカスタムビューがあるのは
>>123 の指摘通り。
Cocoa ってもともと 68040 の NeXT で動いてたフレームワークだから、実はそういった
効率に関してはかなり気をつかってるのよね。
>> 128
Nib ディレクトリの下に3つファイルがあるけど、そのうち info.nibを消すと IB で編集が
できなくなるけど、アプリの実行には問題ない状態になる。詳しくは Omniの奴らが作って
るどれかアプリの中を見てみれ。奴らはそうやって IB でいじられないように細工している
はずだから。
- >>142
Omni製品、確かにinfo.nib無かった。
でも、編集出来るよ?
OmniGraffle 2.2。(古
- >>141
Tiger以降というのは、インストーラを開発する環境がTiger以降ですか?
それとも、Installer PlugInを使用して出来上がるインストーラが
Tiger以降でしか使えないってことですか?
すいませんがよろしくお願いします。
- す、すいません。
ここの板の高度な会話の感じを汚してしまうようで誠に申し訳ないのですが、
Tiger付属の、Automator.appの、
「Web ページからテキストを取得」
ってあるではないですか、あれってどんな処理を行っているのですか?
昔、WebKitを使って取得したWEBページから、テキストを抽出しようとして、
見渡してみたところ、一発でできるものがなくて(不勉強だったら申し訳ありません)、
仕方がないので、NSTask・NSPipeでPHP使って、タグを除去する、という処理を書いたのですが、
ひょっとしたら、一発で「Web ページからテキストを取得」ってできてしまうのですか?
これってTiger以降? それとも昔から?
不勉強だったら申し訳ありませんが、どうかご教授願えないでしょうか?
どうか宜しくお願い致します。
- Automatorがどうだかは知らないけど
[[[NSAttributedString alloc] initWithHTML:htmlData documentAttributes:nil] string]
とか
- >>144
多分だけど、Installer Plugin使ったら
開発、使用共にTiger以降。
10.2、10.3サポートしたいなら
PackageMakerヤメてVISE使うとか
自作した方が早いと思うよ。
- 参考:
ttp://developer.apple.com/tools/installerpolicy.html
- >>147-148
う~ん、そうですかぁ…
10.3以前はサポート外ですか。
残念!
情報ありがとうございました。
- Xcode2.1をDLしたのですが、
インスト画面で英語しか選択出来ませんがこれインストしたら
アプリが英語表記しか出来なくなるんでしょか?
- Xcode自体は英語のみっぽい
でもアプリの日本語へのローカライズは可能
- nibファイルって言語毎に作り直さないといけないんだよね。
レイアウトの関係で文字だけを切り替えるわけにはいかない
かもしれないけど、もう少しどうにかならないかな。
一つのオブジェクトに、複数の言語を設定できるようにするとかさ。
レイアウトを変更したい時には、言語毎にオフセット値を持つとかさ。
- >>152
そういうソフトがあるよ。
AppleGlot とか iLocalize とか。
まあ、レイアウトは手で直さないといけないけど。
- レイアウトし直さなくてもいい部分もあるんだから、stringsとそのキーを指定できるようにしといて欲しい
- 【Universal Binaryの導入】にある
「たとえば、インテルベースのMacintoshでは、nilへ送られるObjective-Cのメッセージは、floatまたはdoubleとして型指定された戻り値として無意味な値を返します。PowerPCベースのMacintoshでは、これらのメッセージは0.0を返します。」
つうのは、nilにメッセージ送ってもnilにならないと言う事?
[[[ClassName alloc] init] autorelease]はこれからはするなってことかなあ
- id object = nil;
if ([object hoge] == 0.0) {
...
}
こんなコードを書いてる奴は気をつけろってことじゃないのか。
- これヤバイかも
if([aString isEqualToString:bString])
だとaStringがnilでもtrueになっちゃうわけだよな
- http://developer.apple.com/ja/documentation/cocoa/Conceptual/ObjectiveC/3objc_language_overview/chapter_7_section_3.html
> メッセージがオブジェクトを返すかぎり、nil に対するメッセージも有効です。その場合、nil に送信された
> メッセージには nil が返されます。nil に送信されたメッセージがオブジェクト以外のものを返す場合、
> 戻り値は未定義です。
ってあるから、>>157は今まででも真になる可能性はあったんでしょ?
で、インテルベースだと、オブジェクトを返す場合でもnilじゃなくなるってこと?
- まず1点
http://developer.apple.com/macosx/adoptinguniversalbinaries.html
原文にはnilがどうこうと言う一文がない。
2点目
Objective-C の言語規約として
http://developer.apple.com/ja/documentation/cocoa/Conceptual/ObjectiveC/3objc_language_overview/chapter_7_section_3.html#//apple_ref/doc/uid/20001424/TPXREF104
「メッセージがオブジェクトを返すかぎり、nil に対するメッセージも有効です。
その場合、nil に送信されたメッセージには nil が返されます。
nil に送信されたメッセージがオブジェクト以外のものを返す場合、戻り値は未定義です。」
(改行位置変更)
となってるから、
「""戻り値の型が float や double である場合は、"" floatまたはdoubleとして型指定された戻り値として無意味な値を返します」
で有れば言語規約上は問題なし。
本当にどうなるかは、Apple に直接聞くしかない。
無意味な値として、いつも0以外を返すのであれば Intel マシン借りてる人に聞けば分かるかも。
でも、無意味な値っていつ、なにが返されるかは、作った本人すら分からない可能性も高い。
- 原文のUniversal Binary Programming Guidelinesのほうには
On a Macintosh that uses an Intel microprocessor, Objective-C messages sent to nil return garbage for return values that are typed as float or double. On a PowerPC Macintosh, these messages often return 0.0.
On a Macintosh that uses an Intel microprocessor, Objective-C messages sent to nil also return garbage for return values that are types as a small struct. On a PowerPC Macintosh, these messages often fill in the fields of the struct with zeros.
ってあるからこりゃ私の早とちりですね。
floatとかdoubleの戻り値を持つメッセージの場合、PPCだと0だけどIntelだと無意味な何かだよ、ってだけかな。
戻り値がidなら今までどおりnilでしょう。
- そっちに有ったのか。
わざわざ、そのものの原文探しちゃったよ。
まあ、どっちにしても問題をはらんでることは確かだよね。
-[NSNumber floatValue] も 「nil だったら 0 が返るから...」 は通用しないって事だよね。
- NSTextFieldでインプットメソッドの使用を不可、もしくは
ScriptをRomanにしたいのですがどのようにしたらよいのでしょうか?
例:システム環境設定→ネットワーク→TCP/IPの各テキストフィールド
ここまで調べた:
・NSInputManager cycleToNextInputLanguage: はもう使うなと書かれている。
・Carbon使っちゃう?→KeyScript(smKeyRoman);
- 今でもi86とPPCではprintf("%f\n", (void *)0)とかの結果は違うので、
0.0だと仮定したコード書いちゃだめですよということだと思うにょ。
- よし、これからの合い言葉。
「ニルポ」に注意。
リトルエンディアンだと、32/64ビットポインタの場合、ワードが確定出来ず
不正値になるってこと?
いや、俺が言って事も意味不明だ。
- ニルされたらガッするんですか
- nilにメッセージを送ったときの挙動についてこんなページを見つけたけど
よく分からない・・・
ttp://ridiculousfish.com/blog/?p=14
- 結論は最後のTypes, types, typesの部分だね
ints, shorts, charsは常に0が返る
long longだと上位32bitは0で下位32bitは送ったセレクタと等しい値が返る
floatだと送った時点でfloating pointレジスタに入っていた値がそのまま返ってくる
構造体の時は何も返ってこない(0ではなく、代入しても元々の値が維持される)
って感じでしょうか?
間違ってたら訂正よろしく
- フォルダをドロップで扱えるソフトを10.3で作ったのですが
10.4にしたら受け付けなくなりました。
フォルダの拡張子とかが変わったのでしょうか?
- >>166のページの最後のコメントはマジ?
なわけないか・・・。
- 忘れ物
ニルポ
- >>167
そんな感じ。
PPC の場合はね。
PPC の場合は、r3 にC関数の第一引数が入れられ、
また long long を除く整数戻り値も r3 に入れられる。
id 型はこれにあたる。
で、C関数 objc_msgSend の第一引数はメソッド呼び出しの隠し引数 self のことだ。
で、objc_msgSend はr3 が0なら"何もせずに"呼び出し元に戻る。
つまり、[nil message] なら r3 は 0 のまま。
戻り値は r3 に入ってるのだから 0。
つまり、「id 型なら偶然だがnilが返る」ってことらしい。
が、これだと戻り値の型が long long でも float,doubleでも
とにかく0を返すって言う Apple のドキュメントと食い違いがあるから、
Apple は公開してるアセンブラとは違うコードを使ってるのかもね。
ってかんじかな。
単に r4 と FPR1 に0をロードしてるだけかもしれないが。
>169
マジだとすると、言語規約から外れちゃうよ。
でも、予期しないバグが発生する可能性はあるよね。戻り値の型によるけど。
- そもそも、ゼロ以外のポインタがオブジェクトの参照として有効かどうかって調べる方法あるの?
- >>172
ないんじゃないかな?
Apple の関連ドキュメントのどこにもlong long に言及した部分がないのが気になるが、
これからは、整数値(ポインタやBOOLを含む)以外を返すメッセージを送る場合は、
センダが nil かどうかをチェックするようにしないとだめだね。
if([aString isEqualToString:bString])
は OK だね。
if ([object hoge] == 0.0) {
は
if ( !object || [object hoge] == 0.0) {
かな?
- >>171
そうだよね。規約モロはずれ。
nil targeted actionも出来なくなるし。
>>172
所詮ポインタだから無いんでないの?
アラインメントとか見てもアテに出来ないし。
- >>162
テキストフォーマッタではダメか
- >>174
>nil targeted actionも出来なくなるし。
いや、それは勘違いしてる。
terget が nil の時は NSApplication が最初のターゲットを KeyWidnow の FirstResponder にするだけだから。
つまり、NSApplication が nil チェックをしてるってことね。
- >>170
ヴァッ
- >>176
指摘サンクス。
- ObjectiveCって無名クラスって使えないんだよね。
うーむ、Cocoa-Javaがいいかもなぁ。
例えば、テキストフィールドで編集を開始したイベント取得したい時なんて
NSTextField xxx = new NSTextField(ちょめちょめ){
public void textDidBeginEditing(NSNotification n) {
ちょめちょめって、インスタンス時にオーアライドできるから楽だよね。
}
};
って出来るんだよね。ちょっとしたプログラムを組む時にはCocoa-Javaかな。
- その用途ではふつー subclass なんか作らない
- え?
- 少なくとも「テキストフィールドで編集を開始したイベント取得したい時」
はNSTextFieldのdelegateで受け取ればいいじゃん、と180は言いたいのだと思われ
まあ一般的にCocoaフレームワークではそういう場合delegationだと思う。
- オーアライドに突っ込んであげない優しさ。
- >>180,182
例題が悪かったけど、こんな場合は便利かな。
NSView xxx = new NSView (ちょめちょめ){
public boolean isFlipped(){
return true;
}
};
なんてのはちょとした時、便利でしょう。
- ちょっとしたことでサブクラスを作るものなのか?
- >>184
本当にそれだけなら便利かもしれないけど、
flipするなら描画ルーチンも必要なわけで結局サブクラス化するんじゃないのかな?
- >>186
そんな時は、
NSView xxx = new NSView (ちょめちょめ){
public boolean isFlipped(){
return true;
}
public void drawRect(ちょめ){
フリップした描画
インスタンス生成元のインスタンス変数にアクセスできるので
サブクラスにするより便利
}
};
まあ、ちゃんとしたプログラムを組む時にはお奨めしないけど、
ちょっとしたプログラムはCocoa-Javaが楽だと思いますし、
Cocoaの勉強に最適でしょう。
- 下手にJavaを使ってるとdelegationやinfomal protocolの概念で躓く。
カテゴリによるadditionになるともう何がなんやら。
- こんな感じのコードに慣れてしまうのは良くないかな・・・。
class Chome {
private boolean hoge = true;
void test(){
NSView xxx = new NSView (ちょめちょめ){
public boolean isFlipped(){
return hoge;
}
public void drawRect(ちょめ){
fliptest();
}
};
xxx.setHidden(true);
}
void fliptest(){
ちょめ描画
}
}
- ちょめちょめひつこい
- >>188
Javaなんだから、アスペクト指向に向かうのも良いかもよ。
Cocoa+Aspectjは面白いかもしれないなぁ。
- インフォーマルプロトコルとは何ぞや
- UniversalBinaryに移行汁で
Apple必死だな。
- UniversalBinaryは、PPCとIntelの両環境でテストしなきゃならない
のは辛いよね。
銀行なんかの大規模業務アプリ屋は心配で堪らないだろうなぁ。
- Mac採用してないのでは?
Winでテストも大変だろうが...
........見て見ぬふり & 落ちたら or 漏れたら謝って再起動
- あおぞら銀行ではTigerを導入したって記事をなんかで読んだよ
- >>191
つhttp://www.cocoadev.com/index.pl?AspectCocoa
- >>192
NSObjectのカテゴリ。ただし宣言のみ。
普通のプロトコルと違うのは、メソッドの実装が任意であること、
特にプロトコル準拠を宣言する必要が無いこと。
要はインフォーマルプロトコルと書いてあったら、そのうち必要なメソッドだけ実装すればいい。
- >>198
NSObjectに限らないのでは?
NSTableViewのdatasourceなんかもインフォーマルプロトコルでしょ
- >>199
宣言をよく見ようね。
- >>200
私が間違っておりましたorz
- そのいさぎよさ天晴なり。
- OOMORI.COMのCocoaリファレンスは、しばらく休むそうだ
英語の理解出来ないオレは、これからどうやってCocoaのAPI調べりゃいいんだい。
- つttp://www.excite.co.jp/world/
- 早くxcode2に対応した本、どんどんでないかな?
- "clearColor"色で1ドットだけ打ちたいんですけど、どうすればいいんでしょうか?
- NSAutoreleasePoolってreleaseした時点でメモリ開放処理が流れるんですか?
それとも、JavaのGC見たいに処理の合間に開放されるのかな。
思うんですけど、ObjectiveCって何故DefaultでNSAutoreleasePool状態
じゃないんでしょうかねぇ。
あ、ObjectiveCとCocoaが別の仕様だからか。
他の用途でObjcなんて使わないのだから、MS見たいに、
独自にObjectiveCを拡張すれば良いのにねぇ。
- >>206
RGBAカラースペースで0,0,0,1かなんか指定すればいいんでない?
- >>207
Objective-C はすべて Apple のものだから、
独自拡張にはならないと思うな。
- >>208
色というか、NSFrameRectとかNSBezierPathとかで1ドットだけ打てないんです。
アンチエイリアスを解除するとNSBezierPathでは他色なら1ドット打てるように
なったのですが、clearColorは打てません。どうしたらいいんでしょうか…
- >>209
BitmapImageRepを取得してsetPixel:atX:y:かな?
やったことないから知らんが
- リンクエラーについての質問です。
あるライブラリ(libHoge.a)をリンクしてビルドすると
以下のようなリンクエラーが表示されました。
libHoge.a (__.SYMDEF) bad magic number (not a Mach-O file)
このエラーはどういったときに表示されるのでしょうか?
libHoge.aが壊れているのでしょうか?
- >>211
試してみたところ、やはり他色と違ってclearColorでは打てませんでした。
当分2ドット四方のRectでごまかしますorz
- >>212
そのlibHoge.aの出所はどこだね
まさかlinuxとか言わないよな
- >>214
linuxではないんですよねぇ…。
MacOS10.4のgcc4.0でメイクしてつくったものなんですよね。
ADCに聞いてみようかなぁ。
そういえばADCに質問するのって、セレクト会員になんなきゃ
だめなんでしたっけ?
質問回数って制限あるのかなぁ。
- ADCってセレクト会員だと年2回質問できるんだっけなぁ?
- オープンパネルを使ってデータの取得はでき、NSTextFieldに
そのパスを表示する事はできました。次はNSTextFieldに書き
込まれているファイルパスからデータを読み込みたいのですが
どのようにすれば良いのでしょう?
- NSData
- NSTextFieldに書き込まれている文字列はNSDataから取得できるんですか?
- テキストフィールドからNSStringを取り出す所から教えろと言ってるのか?
[NSData dataWithContentsOfFile:[textField stringValue]]
- 釣りのような気がするが一応
IBOutlet NSTextField *textField;
NSData *data=[NSData dataWithContentsOfFile:[textField stringValue]];
- できました!
本当にありがとうございます!!
- >>215
質問券は1件いくらで売っていますからオンラインでも買えば質問できますよ
- アプリケーションがユニバーサルバイナリかどうかを調べる方法ってありますか?
Finder上からだと判別できないような気がするんだけど
- パッケージを開く
- >>223
すいません。
その質問券が売られているアップルのサイトはどこにあるのでしょうか?
教えていただけませんでしょうか。
- ADCのメンバーサイト内でお買い物汁
- >>224
Terminalで、fileこまんど。
- >>225
パッケージを開いただけではわからないす
「Unix実行ファイル」のバイナリが一個あるだけなんで
>>228
おおー、サンクスです
ちゃんと調べられました
- Xcode2.0で作成したプロジェクトを
Xcode2.1で開き直しました。
そうすると、Xcode2.1からプロジェクトを実行すると
dylibが見つからず、実行出来なくなりました。
ためしに、アプリと同じ階層にdylibを移動させると
起動出来るようになったのですが、
Xcode2.1はこういうものなのでしょうか?
以前は、以下の場所
/Users/MyName(ユーザ名)/.MacOSX/environment.plist
のplistファイルに
環境変数DYLD_LIBRARY_PATHの値(パス)を
dylibが存在するパスに指定することで
うまく起動できていました。
こういった症状についてご存知の方がいらっしゃいましたら
ご教授いただけると幸いです。
宜しくお願いいたします。
- Xcode スレを紹介しようと思ったら、マルチだもんなぁ…
- わざわざageているところからしても、真面目に返答する必要ないだろ
- いや質問や意見の提起はageが普通だろう
- いずれにしろマルチは(ry
- まあそうね
- とても詳しく書いていながら、最も重要である
見つからない dylib の詳細が
何ら書かれていないのはかなり秀逸。
- あーもうドキュメントベースアプリよくわかんねー^^
Javaと違ってウインドウをほいほい出すわけにはいかんのね。
どうもnibとウインドウコントローラの扱いかたで混乱しているようだ。
HMDTとヒレガスたん読んでればそのうち自由自在になりますか?
- >>237
http://developer.apple.com/ja/documentation/japanese.html
ここの「ドキュメントベースアプリケーション入門 」もどうぞ。
- マルチ本当にすいません。
本当にせっぱ詰まって
社内で質問する人もいなくて、
藁にもすがる思いで掲示板に書き込んでしまいました。
もう後がないんです。
助けてください。
- コードからNSTokenFieldからstringを取り出すのはどうすればいいでしょうか。
普通にクリップボードにコピーすると、テキストフィールドのように文字列としてコピーされますが、
コードからもそうしたいのです。
- 俺もTokenFieldの編集中の挙動をいじりたいんだけど、
どのレベルでいじればいいのかわかりません。
- >>239
とりあえずスレ違いっぽいからXcodeスレに戻って聞こうや
http://pc7.2ch.net/test/read.cgi/mac/1124761121/
- >>238
?クス
数時間勉強と試行錯誤を繰り返して
ようやっと普通のアプリではウインドウほいほい出せるようになった。
これなら明日にはドキュメントベースも制覇かな・・・?
- ttp://pc7.2ch.net/mac/subject.txt(SJIS、容量:40KB)
これをローカルに落として、読み込んでもコンソールにnullが返ってくるんですが。。
>NSData *data = [NSData dataWithContentsOfFile:@"?/subject.txt"];
>NSString *str = [[[NSString alloc] initWithData:data encoding:NSShiftJISStringEncoding] autorelease];
>NSLog(@"%@", str);
ttp://pc7.2ch.net/mac/dat/1124986925.dat(SJIS?、容量:68KB)
ttp://pc7.2ch.net/mac/dat/1088457299.dat(SJIS?、容量:156KB)
スレのdatの場合、同じテキストファイル(.datだけどDLすると.txtが自動的に付く;文字コードも多分同じSJIS)なのに何故かちゃんと内容が返ってくる。
以前どこかのスレで見た、「stringWithContentsOfFile: は100KB超えるとエンコーディングに失敗する(nilが返る)」というのには当てはまらない。
何か原因があるのでしょうか。
- >>244
私が小耳に挟んだ情報によると、S-JISでも機種依存文字を含んでいると失敗するのだそうです。datでもtxtでも同様です。
確かに既存のMac用2chブラウザのソースコードを見てみると、NSDataの段階で問題のある部分をちょこちょこと変換してからNSStringに直しているようです。
- S-JISと言っても「日本語(Mac OS)」と、そうじゃないのがあるという事かな。
- 画像をEPSで保存するにはどうしたらいいでしょうか。
- >>245
CoreFoundationのCFStringだと同じSJISでも
ShiftJISとMacJapaneseとDosJapaneseにエンコーディングが分かれてるんだよね
このあたりを使い分ければできるのかも
- 1071970479.dat<>?????? Back to 9 ?????? (572)
どうやらこの矢印が原因っぽいです。ここを境に読めなくなります。
NSDataの段階で対処するというのをやってみようと思います。
ありがとうございました。
- >>247
俺には分からん
- Photoshopを買えばいいと思うよ
- >>247
ToyViewerのImageSave.mあたり
- セーブパネルで複数のフォーマットがあるときの拡張子の設定てどうすれば?
[savePanel setRequiredFileType:@" "];
を各フォーマットに書いても無視されます。
- setAllowedFileTypes: を使えば?
10.3 以降だが。
- GeekToolとかStattooとか、Exposeに反応しないウインドウってどうやって作ればいいのだろうか。
GeekToolのソース見ても全然わけわかめ
- Cocoa初心者です。
当たり前な事なのかもしれないけどメモリ管理について質問です。
Aオブジェクト→Bオブジェクト→Cオブジェクト
という感じに参照が行われている時、突然Aオブジェクトがreleaseされて
参照カウンタが0になった場合、BCオブジェクトはリークしますよね?
もしリークするのなら、メモリ管理は通常のCやC++と殆ど変わらない
(プログラマが意識する度合いが)ような気がします。
凝ったアプリケーションの場合、メインイベントループ内の
NSAutoReleasePoolは別スレッドの事を考えると結果的に使えない
(使わない状態を維持したほうが良い)ような気がしますし、
全体を通してメモリ管理を統一しないと物凄く危険な香りがするの
ですが実際にはどうなのでしょう?
ご教示お願いします。
- >>256
http://developer.apple.com/ja/documentation/cocoa/Conceptual/ObjectiveC/index.html
これをよく読むこと。
レポートの再提出は一週間以内とする。
- 全体として、initなりretainなりしたら自分でreleaseしろと言うポリシーになってますが。
- 日本語ドキュメントあったんだ。ありがとう。
読んでから答えを出します。
字がちっちゃくてめんどいなぁ(笑)
- 自分(この場合オブジェクト)が参照している(retain = 保持している)オブジェクトに関しては
自分がdeallocされるときにreleaseすべし。ということなんです。
だから質問の例で行くと、Aオブジェクトは自分のretainしているBに関して責任を持つ。
BはCに関して責任を持つ。それだけです。
NSAutoReleasePoolは、別スレッドをdetatchしたときはそのスレッド内で新たに作り、スレッド終了時に開放します。
ループ内での使い方と同様。
- 具体例を挙げると、インスタンス変数で
NSString *hoge; を持ってるなら、
-(void)dealloc {
[hoge release];
[super dealloc];
}
としておくのが定石かと。
- >>258-261
ありがとうございます。
C++と同じ考え方ですよね。
しかし、NSArray等にNSStringを保持する時、autoreleaseしたオブジェクト
やretainしたオブジェクトがあると思うのですが、
通常はretainしたオブジェクトを保持するということでしょうか?
この場合、もしNSArrayがautorelaseだと問題ですよね。
NSArray等の保持するクラスを使用する場合は、開放する時に全ての要素に
対して自力でreleaseを送るようなスタイルが良いって事ですね。
うーむ、参照カウンタ方式の良さが理解できないなぁ。
- >>262
オブジェクトが他でretainされていようとautoreleaseされていようと、
例えばNSArrayは自身が保持するオブジェクトはretainし、
NSArrayがdeallocされるときは全てreleaseします。
そのNSArrayを保持する側としては、中身に気を使う必要はありません。
autoreleaseは単に「後でreleaseしてね♪」ということに過ぎません。
- 私が勉強したのはここですが、
ttp://wwwa.dcns.ne.jp/?nito/CocoaClub/article01.html
(3)の一部だけ引用しておきますと
【鉄則1】自分で生成したオブジェクトは、自分で解放する
【鉄則2】他人が生成したオブジェクトは、気に留めない
【鉄則3】他人が生成したオブジェクトが必要なら、必ず保持(retain)して、必要にならなくなった時点で、必ず解除(release or autorelease)する
原則は単純です。まあ実際書いてるとrelease忘れたりしてリーク起こしてたりしますが、ObjectAlloc見てれば大抵分かります。
- >>263
(1)
NSString を initWithString で生成すると +1
それをNSArrayに保持すると +1 で参照カウンタが2になる。
(2)
NSString を stringWithString で生成すると +1 (autorelease)
それをNSArrayに保持すると +1 で参照カウンタが2になり
イベントループを抜けると autoreleaseがreleaseされ1になる。
(1)はNSArrayをreleaseすると保持しているオブジェクトに-1が送られ
それぞれのオブジェクトは1になりこのままではリークしてしまうので
NSArrayをreleaseする前に個別にreleaseする必要がある。
(2)はrelease時に保持している参照カウンタが1なので開放される
こんな感じだと思っていたのですが違うのでしょうか?
- ところで、ObjectAllocの使い方がイマイチ解らんのは俺だけですか?
- >>265
とりあえずallocする時は
[[[hoge alloc] init] autorelease]
のセットで使う、と覚えなされ
でとっておきたいものに関してはretainする
retainしたものに関しては自分が解放されるまでに責任を持ってreleaseする
NSArrayやNSDictionaryに突っ込んだものはそいつらがなんとかするから自分は気にしない
そのかわりArrayをretainしたら後で忘れずにreleaseする
これでとりあえずはOK
- >>267
汎用的に使用するクラスの場合、メインスレッドから呼ばれるとは
限らないので、独自クラス内でNSAutoReleasePoolを生成し
なるべくautoreleaseを使用したほうが良いということですね。
initの中でNSAutoReleasePoolを生成し、deallocでreleaseしてもOKですか?
(deallocするまでにメモリ消費量が少ない場合と仮定して)
>NSArrayやNSDictionaryに突っ込んだものはそいつらがなんとかするから自分は気にしない
何度も質問していますが、突っ込んだオブジェクトがretainしていたら
リークしますよね?
- >>268
もういいから、テキスト読んで一週間以内にレポートを再提出すること。
はっきり言って、あなたは全く何にも理解できてないから。
- >>268
そのobjectが自分の手を離れるんなら、arrayやdictに
突っ込む前にautoreleaseしとくんだよ。
ドキュメント嫁って、解ってないのに拘るなって。
- >>269-270
ごめんなさい。
>そのobjectが自分の手を離れるんなら、arrayやdictに
>突っ込む前にautoreleaseしとくんだよ。
これですっきりしました。ありがとうございます。
もっとドキュメント読んで精進します。
しかし、、、もう少しディスカッションしたかった・・・。
- 議論したいなら最低限の前提知識は自分で調べとこうね
- 前提知識は間違ってないけど妙なこだわりが有る希ガス
- Objective-Cってなんでこんなに遅いのよ
- おまえのコードが糞なだけ
- >>265
は間違いじゃないような気がするけど間違いなの?
- 数字は正しいけど考え方が間違ってる
- >>275
いやぁ、俺のコードが糞な分をさっ引いても
オブジェクト生成とか遅すぎじゃん。
新PowerMacのスペック見てたらどうでも良くなってきたけど。
- Objective-CのNSObjectとC++の空っぽのクラスで
それぞれ100万回オブジェクト生成と破棄を繰り返してみた
Objective-C
1.260u 0.040s 0:01.86 69.8% 0+0k 0+0io 0pf+0w
C++
0.660u 0.030s 0:01.07 64.4% 0+0k 0+1io 0pf+0w
倍くらい違うかな?
- >>279
NSObjectにどれだけのメソッドが実装されてると思ってんだよw
- ここね
http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSObject.html
- オブジェクトのアロケートにはメソッドの量は全く関係ない気がするのは僕だけですか?
- まぁ、遅いだろ。
- とにかく速さがほしいのなら C か C++ のような不自由言語でも使っとけばいい。
- 倍ぐらいってのは妥当だと思う
- >>279
これは概ねアロケータの速度比較になっちゃうからあまり意味ないでしょ。
それにC++で速度が必要な時はアロケータ特殊化したり、スタック上に作るからもっと速いよ。
- NSObjectやNSStringみたいなコアな部分が高速化されれば、
今のCocoaアプリ全体的に速くなるかもな。
そういえば、どこかのサイトに高速化ネタが書いてあったなぁ。
- ttp://www.mulle-kybernetik.com/artikel/Optimization/
- ttp://homepage.mac.com/mkino2/spec/optimize/index.html
せっかくあるんだからこっちを…
- 動的結合の仕様とか考えてもC++などに比較して遅くなるのは仕方ないでしょう
スピードだけ考えればマシン語最強!とかいう話になっちゃうし
スピードと生産性のトレードオフをどこまで許容するかということになるよね
負荷が高い処理はCやC++で書いてObj-Cでラップするとかってのもありだし
- >>290
>負荷が高い処理はCやC++で書いてObj-Cでラップ
Core Foundationはそんな感じでは。
- もしかしてObjcのメソッドは全て動的結合してるの?
普通コンパイラの最適化で静的結合できるのものは、
静的結合するんじゃない?。
やってなければコンパイラの最適化が足り無杉
- 外部のローダブルバンドルが無理矢理上書きすることも出来るし、
既存のクラス階層の間に別のクラスを挿むなんてことも出来ちゃうからね。
- それなら、javaのfinal見たいな静的結合用の宣言指定詞を
作ればいいのに。
通常のメソッドは動的結合する必要も無いでしょ。
これだけで、パフォーマンスチューニングの幅が広がると思うけどな。
- >>294
methodForSelector
instanceMethodForSelector
- >>295
でもそれって実行時にセレクタのポインタを取得するんですよね。
コンパイル時に解決した方がシンプルでパフォーマンスも稼げると
思うけどな。
- >>296
セレクタじゃなくてメソッドの実体(関数)のポインタ。
シンプルかどうかはともかく、パフォーマンスはこれで十分だと思うが。
- せめてスタックにオブジェクトを・・・
でも、相当注意しないと使えネェか。
- メリットがほとんどないな。
- なんですかこのスレは. パフォーマンスかつかつの貧乏人だらけですか
富豪はリソース, バツーンと使って, それで遅くても余裕でどっしり待つ訳ですよ
顧客には「待っとけ」と優しく教えてやればいいじゃないですか
- そうだぜ。
オブジェクトのアロケートなんてプログラムのほんの一部だろうに。
- そうはいっても、小さいオブジェクトを大量に作れば、気になるわけで。
- アップルは、
UI周り->Obj-C、
Core Graphics, Core Sound->C
とパフォーマンスを考慮して実装しているはずだが。
- なにかここ何日か、復刊.comのObjective‐C?MacOS Xプログラミング入門の復刊リクエストに
やたら票が入るんだが
どっかのサイトで紹介されたとかしたんかな
- >> 304
mkinoさんのHMDT
- 復刊もいいけどぜひ新しいObjective - Cのプログラミングの本を…。
- >>306
水面下では期待できそうなことが色々あるらしい。
荻原先生が転勤&引越が一段落ついた頃が鍵か?
- 本格的なプログラミング言語とスクリプトの学習難易度の開きの一つが
学習のための本なんかの(供給量/必要量)が圧倒的に違うというのがあると思う。
例えばPerlなんかだとモジュールを使ったり作ったりとなると
英語も読んで自分で調べてどうのこうのが必要だろうけど
入門書に書いてある内容だけでも充分具体的に役に立つものが作れる。
マルチプラットフォームの言語だから本の供給量もネット上の資料も多い。
対してC言語だと独習Cとかその手の基本概念や構文を学ぶ本はあるが
それで役に立つものを作ろうというのは無理だ。
OSに具体的に何かさせるための命令についてのリファレンスだの具体例だのの本というのはほとんどない。
あるいはインサイドマッキントッシュ?みたいな糞高い本しかない。
そしてMacで日本語でとなるとなおさら資料がない。
と、長々愚痴ったが半分以上言い訳ですね。
- Brad Coxの本も読んでみたいので投票ヨロ。
書名:オブジェクト指向のプログラミング
- >>308
そうかねぇ? 俺にはプログラミング言語の方がとっつき易いけど。
スクリプト言語ってUNIX風の意味のわからないおまじないがあるのが
イヤだ(Perlとか)。
インサイドマックのようなくそ高い本って何を指してるのか知らないけど
リファレンスならWebサイトで参照出来るし、Xcodeからも参照出来る。
サンプルってフレームワークのサンプルでしょ。元々規模が全然違うん
だから一冊の本で全部やるなんて不可能だよ。
プログラミング言語やスクリプト言語って得意・不得意があるから
いいとこ取りでうまく使えばいいだけの話。
- >>308
>対してC言語だと独習Cとかその手の基本概念や構文を学ぶ本はあるが
>それで役に立つものを作ろうというのは無理だ。
んなこたぁない。C言語と標準ライブラリだけで
十分役立つモノが作れる。作れないって言うのは
まぁ自ら仰ってるように言い訳ですな。
- 意味のわからないおまじないって、
シェルスクリプトの1行目の
#!/usr/bin/sh とか #!/usr/bin/perl の事かいな。
ありゃ単に#で始まる行はコメントって決まってて、
#!/usr/bin/perlっていうのは
ファイルに実行パーミッション付けてターミナルから
(そのファイルのパス)で実行した時に
このファイルを解釈して実行するのは/usr/bin/perlですって書いてるだけ。
実行パーミッションを付けてないファイルのPerlを実行する時にターミナルで
/usr/bin/perl (そのファイルのパス)
て書く、その/usr/bin/perlがファイルの中に入っただけ。
C言語でもコンパイラに読ませるためのマクロ?とかいうのがあるでしょ?
コメント行として書くやつ。
いくらシェルスクリプトやPerlの資料がたくさんあって読みやすくても
読んでなきゃわからんわな。
得意・不得意がある事と学習のしやすさは関係ない話というか、
本格的なプログラム言語じゃないとできない事があるから勉強したいけど、
難しいよ~ヽ(`Д´)ノウワーンって言ってるだけです。
- >>311
数学的な知識とかアルゴリズムの理解があって、必要があれば
何らかの計算をさせるようなプログラムとか作れるんでしょうけどね…。
しかしGUIを作るとなると無理だし、GUIなしで役に立つものはと考えて
データの変換みたいな事でもさせようかと思っても
テキストデータ(正規表現)とか画像データとか扱おうと思ったら
入門書の範囲を越えるでしょ?
HTTPのダウンローダとかも無理っぽいし。
標準ライブラリだってその全てが入門書で解説されてるわけでもないし、
自分で使い方を調べる方法(ファイルの読み方?)も載ってないような。
- 長々とスレ違いな事を書いてしまいましたが、
こんなヘタレの僕はObjective - CとCocoaを使った開発の
分かりやすくて応用の効く本がたくさん出る事を
切に願います。って事です。
- >>304
ム板のMacスレかどっかで復刊話が出てたからそこじゃね
- >>314
そこは禿同。
サイトやサンプルも、もっと日本語で出て欲しいね。
- 応用云々は自力でAPIリファレンスを読む気があるか次第だと思うけどね
何にしろ簡単な英語は読めないと
- 要は やりたい事が実現するのに必要なもの を見つける力をつける事
そこから先は極端に言えば作業。
- どこがわからないかわからない、な状態から自分の力だけで何かできるようになるって難しいよな
いいお手本ほしす
- 流れぶったぎって湖面。
拡張子を指定して、その拡張子のついた書類を開けるアプリケーションを
すべて教えてくれるみたいなAPIってある?
LaunchServicesあたりを色々調べてみたんだけど、その拡張子の書類を
ダブルクリックしたときに使われるアプリケーションを教えてくれる
メソッド(LSGetApplicationForInfo)しか見つからなかった・・。
- >>320
あるなら俺も知りたい
とりあえずこんなんは見つかったけど
http://developer.apple.com/ja/technotes/tn1002.html
- 目的の拡張子を持つファイルを LSCopyApplicationURLsForURL に指定するしかないのかな?
- ヒレガスの新しい本, 翻訳されないのかな. されないんだろうな.
ヒレガス本の 第2版だってまだだし.
原著はそこらの本屋で立ち読みして決められる訳じゃないから,
買うの躊躇しちゃうよ.
- >>321,322
レスありがとう。やっぱりすぐに見あたるところにはないんだね。
とりあえずLSCopyApplicationURLsForURLでしのぎます。
- ん、ていうかLSCopyApplicationURLsForURLで何か問題有るの?
うわ普通にあるんじゃんとか思って顔真っ赤にしてたんだけど
- >>309
和訳本なら在庫あるみたいよ
http://www.boople.com/servlet/AFsearch?iis=4775303716
- Amazon じゃ散々な評価が付いてるな。
- >>326
あら、本当だわ。
amazon.jpでも買えちゃう・・・。
指摘アリガト。
- HMDTのサイト等を見ると、イベントが発生した時にそのイベントをウィンドウのFirstResponderに送るとありますが
ウィンドウが一つもないときはイベントはどこに送られるのでしょうか、またそのイベントを自分が作成したインスタンスに取得させる方法はありますか?
OpenGLを使っていて起動直後にフルスクリーンになるようにしているのですが
そこでキーボードを押すとキーイベントを受け取るResponderがいないのか、ビープ音が鳴ってしまうので、それを改善したいのですが。
- >>329
>ウィンドウが一つもないときはイベントはどこに送られるのでしょうか
NSApplication。「Responder chain」で調べるといい。
フルスクリーンはやった事無いのでdelegateでイベントをキャッチできるかどうかは知らないけど。
- Cocoa フレームワークに関する機能追加要望なんかは何処で受け付けてるんだろうか。
- http://bugreport.apple.com/
- >>330
キーイベントを受け取りたいインスタンス(NSResponderを継承)をNSAppのdelegateやnextResponderにしてみましたが、どうも上手く受け取れないです。
ADCのAbout the Responder Chainを読みましたが、ウィンドウの選択されているビューがイベントのFirstResponderになり、NSWindowControllerがFinal Responderになるとしか書かれてなく
ウィンドウが無い場合に対する記述は見つかりませんでした。
(アクションについてはNSAppのdelegateがFinal Responderになるとありました。)
フルスクリーンにウィンドウを広げてその上にNSOpenGLView置くほうがよいのかな。
- プログラム終了時に自動的にデータをセーブしようと、
Nibファイル中のカスタムオブジェクト(コントローラ)
のdeallocをオーバライドしたのですが、これが呼ばれません。
プログラム終了時の処理はどこに記述したらいいのでしょうか。
ちなみに、Cocoa 非ドキュメントベースドアプリです。
- applicationWillTerminate:は?
- >>335
試してみましたが、ダメでした。マニュアルを読むと
これで良さげなんですが。なんか抜けているのかもれない。
もう少し試してみます。ありがとう。
- どう試したのかくらい書けよ。
できるはずなんだから。
- delegateにし忘れたんじゃないの。
- >>336
まっとうな質問もできないようなやつは来るんじゃない。
- - (void)applicationQuit:(NSNotification *)aNotification
じゃ駄目なのかい?
- /* ノーティフィケーションセンターを取得 */
NSNotificationCenter *NCenter = [NSNotificationCenter defaultCenter];
/* ノーティフィケーションセンターにオブザーバーを加える */
/* アプリケーションが終わる直前の通知 */
[NCenter addObserver: self
selector: @selector(applicationQuit:)
name: @"NSApplicationWillTerminateNotification"
object: nil];
まあ、こういう準備しとかなきゃ駄目だけど。
/* ノーフィティケーションを削除 */
NSNotificationCenter *NCenter = [NSNotificationCenter defaultCenter];
[NCenter removeObserver:self
name:@"NSApplicationWillTerminateNotification"
object:nil];
こういうのを、deallocにでも書いておくのをお忘れなく。
- カタカナで「ノーティフィケーションセンター」ってなんか格好悪いね。
- 341 のとおりにしたらできますた。
でも、338のいうとおり、どこかにデリゲートとして
登録して、ApplicationWillTerminate:を使うというのも
ありかもしれません。今日は一日マックとは離れた生活
をしていていたので、 Notificationに登録する方法と(いまのところ
これで実現できている)、
前述の、デリゲートを登録する方法を(明日以降)
もう少し調べてから、また不明な箇所があればカキコします。
レスして下さったみなさん、ありがとうございます。
- >>343
>>336
>マニュアルを読むとこれで良さげなんですが。
あー、どこのマニュアルを読んだって?
- XCodeについてくるデベロッパマニュアルの
APIレファレンスです。
- Commandキーが押されているかどうかを調べたいのですが、どうやったら良いでしょうか?
[NSEvent currentEvent]で調べられるかと思ったのですが、
モディファイヤキーだけが押された場合はイベントが発生しないみたいです。
なおCommandキーが押されたイベントを受け取りたいのではなくて、
任意のタイミングでCommandキーが押されているかどうかをチェックするのが目的です
知っている方いましたら、教えてください。
- >>346
GetKeys()
GetCurrentKeyModifiers()
Carbonですけど。
- >>347
おお!
BOOL commandKey=( GetCurrentKeyModifiers() & cmdKey );
という感じでいけました
ありがとうございます。
- http://pcweb.mycom.co.jp/special/2005/cocoamvc/menu.html
TigerのCocoaにみるMVCの完成
- スマートなデータモデルを実現するCore Data
かなり長い記事です
- おおmkino氏のcore dataの解説!待ってたよ!
- ApplicationWillTerminate のデリゲートの登録は
NSApplication のインスタンス(グローバル変数NSApp)
に対して行う。これでできた。
ということは、>341のやり方でもデリゲートの利用
でもどちらでもできるということだ。
一応報告まで。
- >>351
俺はMainMenu.nibにdelegateにしたいクラスのインスタンスを置いて、
File's owner (これNSApplicationね)からdelegateアウトレット繋いでる。
コーディングしなくていいし。
- なるほど、そんなやり方もあるんだね。
試してみたらすぐできた。 [NSApp setDelegate:self]
を削れる。
- >コーディングしなくていいし。
この部分が、Cocoa初心者の理解を困難にしていると思う。
GUIで設定するので、画面キャプチャーと操作説明が無いと理解できない
人も多いと思うし、googleでも探しにくいから情報が少ないんだよね。
と独り言を言うテスト。
- >googleでも探しにくい
見つけたらこのスレに報告
- >>354
激しく同意。
CoreDataのサンプルなんて開いても設定がどこでどうなってるのか全然わからなかった。
- Cocoa Dev Centralなんかはキャプチャー多くて便利だよね。
http://www.cocoadevcentral.com/
ただ英語なのがとっつきにくいかも。
- >354
こういう仕組みに慣れた世代が主流になると、
「昔はGUIも全部文字で書いてたんだってさ。」
「・・・想像すらできないよ。」
という感想を持つような人も出てくるようになるんだろうな。
と、ハンド・アセンブル世代のジジィが独り言。
- インターフェイスのコーディングが一番ダルい
- そう。インターフエイスのコーディングはなるべく少ない方がいい。
中身が一番重要だからな。
- @interface のコーディングですか
- CoreDataすげー!!
10.3ユーザーな漏れはその存在すら今日まで知らなかった。
すげーよ! まじすげーよ!
- >>362
どうすごいのかObjective-Cで表現しなさい。
- どうせmkinoさんの記事に感化されたんだろ
- @implement Hoge : NSObject
- (void) applicationDidFinishLaunch:(NSNotification)notification
{
// ちまちまプログラム書かなきゃいけなかったところが
// IBからの簡単な設定だけで済ませられるのがすごいです!
}
@end
こうですか?
わかりません!!
- ああ、@interfaceと@implementがごっちゃな上に
アスタリスク忘れてる・・・さよなら
- Launchingじゃないっけ?
- >>365、366
ついでに、(NSNotification *)の希ガス。。。
- つか、みんな容赦ねえなぁ……オレも→ @implementation
- 普段からテンプレートとコード補完に頼りっきりなせいで
超々基本文法すら頭に入っていない・・・
それだけ Mac OS X の開発環境が
ユーザフレンドリで素晴らしいってことだね!('A`)
- 皮肉
- 質問です
いま、NSArrayControllerを使ってCocoaBindingしてるんですけど、
そのArrayに入ってるNSDictionaryの"title"プロパティをユーザーが書き換えたときに
通知をもらいたいと思っています。(NSArrayCotrollerをTableViewにバインドしてる)
で、アップルの説明
http://developer.apple.com/ja/documentation/cocoa/Conceptual/KeyValueObserving/Concepts/KVOBasics.html
を読んで、
[myArrayController addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionOld context:NULL];
とやってみたのですが、タイトルを書き換えても通知してくれません。
なので、適当に
[myArrayController addObserver:self forKeyPath:@"selection.title" options:NSKeyValueObservingOptionOld context:NULL];
とやってみたら、書き換えたときに通知してくれるのですが、それ以外にもTableViewの選択を
変更するたびに通知されるようになってしまいました。(まあ当然でしょうけど・・)
これって、何とかタイトルを書き換えたときだけ通知してもらえるようにできないですか?
皆様のお知恵を拝借できると幸いです。
- ごめん、自己解決 orz
今回やりたいことをする場合は、myArrayControllerにaddObserverを送るんではなくて
myArrayControllerが持ってる各NSDictionaryにaddObserverを送ればよかったらしい。
半月悩んでたのが、カンタンに解決してしまった・・・。
とりあえず、myArrayControllerの中のすべての要素に addObserver:self forKeyPath:@"title"....
とすることで解決しました。
ただ、myArrayControllerの中身が入れ替わるたびにaddObserverしなおすのも面倒だなぁ。
お騒がせしました。
- 全てのファイルをドロップできるソフトを作りたいんですが
PropertiesでExtensionsをどのように指定すれば良いんでしょうか?
OS9の時は「****」で行けたはずなんですが…。
- *
- >>375
ありがとー!
- 例えば、カスタムビューにNSTableViewを指定して、
そのビューの詳細なテーブルの設定をIBで行いたい
ときなど、一体どうやれば良いのでしょう?
インスペクタでAttributeを見ても「hidden」
しかないし。。。orz
- >>377
なにをしたいのか分からないけど、
NSTableViewのサブクラス(例えばMyTableView)を配置したいんだったら、
IBではカスタムビューじゃなくてNSTableViewを配置してからサブクラスを指定すればいいんじゃないの。
- >>377
なにをしたいのか分からないけど、
Instancesタブを階層表示にして階層の中からNSTableViewを選択すれば?
- 346は関係ありませんです...
- >>378,379
レス、ありがとう。
説明が出来てなかったようで申し訳ありません。
レス頂いたやり方だと、どうも違うようです。
1)やりたい事
雛形となるNSTableViewのサブクラスをIBで作っておき、
必要の都度、その雛形を元にNSTableViewのサブクラスの
インスタンスを生成する。(雛形の属性はコピー)
つまり雛形のスーパークラスとなるNSTableViewの基本的な属性を
IBで設定しておきたいのです。(colomn数とかテーブルヘッダなど)
2)試した事
・レス頂いたやり方だと、インスペクタでは、Attributeは「hidden」
となってしまい、NSTableViewの属性の設定は出来ませんでした。
(前に試してみました)
・ソースから一からインスタンスを生成することも試しましたが、
(自分には)無理でした。
説明が下手ですみませんが、もし解決する方法があればお願いしまつ。
- そりゃ、設計から見直した方がいいんじゃないか?
どう考えても尋常な方法じゃない。
- >381
>>378 さんのアドバイスをちゃんと理解できてないんじゃないの?
カスタムクラスのヘッダを IB にドラッグして覚えさせておいて、
Interface Builder で NSTableView をドラッグして適当に配置する。
NSTableView を選択すると、インスペクタの Attributes は
NSTableView のそれを表示するでしょ。
「Attributes」ポップアップメニューから「Custom Class」を選んで、
そこでカスタムクラスを選択する。
最初からカスタムビューを配置するんじゃない。
NSTableView を配置してから、Custom Class で設定する。
- >>378-379の方法でNSTableViewのサブクラスを設定して
エンコード・デコードすれば良いだけじゃないの?
- あと、ここら辺が参考になるだろ
ttp://homepage.mac.com/mkino2/backnumber/2005_08.html#August%2026_2
- >>378、379、383
でけた。。。ありがとうございます。とはいえ、どうもそもそもカスタムクラス
ってものが良く分かってないようだ、自分。UIに関して詳しい書籍ってないものか。
(噂に聞くヒレガス本はどうなのだろう。)
>>384、385
おおスゴヒ!助かります。
>>382
そうか、やっぱり変ですかね?
いずれにせよ、もっと勉強します。ありがとうございました。
- 先月からCocoaを勉強しはじめたものです。
文字列の装飾でNSAttributedStringをつかっているのですが、
アトリビュートが掛かっているレンジを取得するメソッドで
次の2つの違いがよくわかりません。
attribute:atIndex:effectiveRange:
attribute:atIndex:longestEffectiveRange:inRange:
Xcodeのドキュメントを読んだのですが、
longestというのは、何が最長なのかが
よくわかりません。
この2つの使い分け方をおしえていただけたら
うれしいです。
宜しくお願いします。
- >>387
NSRange r;
NSMutableAttributedString * s = [[[ NSMutableAttributedString alloc ] initWithString: @"0123456789" ] autorelease ];
[ s addAttribute: @"attr" value: @"value" range: NSMakeRange(0, 3) ];
[ s addAttribute: @"attr" value: @"value" range: NSMakeRange(3, 3) ];
[ s attribute: @"attr" atIndex: 0 effectiveRange: & ];
NSLog(@"%@", NSStringFromRange(r)); // => {0, 3}
[ s attribute: @"attr" atIndex: 0 longestEffectiveRange: & inRange: NSMakeRange(0, [ s length ]) ];
NSLog(@"%@", NSStringFromRange(r)); // => {0, 6}
attribute:atIndex:effectiveRange: のほうの結果は実装依存だから
{0, 3} 以外の値になるかもしれない。
- × &
○ &r
- >>388-389
ありがとうございます。
文字列に設定しているアトリビュートが
となり同士が同じであれば、マージしてレンジを返すのが
longestEffectiveRangeで、
マージしない個別のレンジを求める場合が、単なるeffectiveRangeを
使うということなんですね。
納得しました。
どうも有り難うございました。<(_ _)>
- id aDate = [NSCalendarDate
dateWithString:@"Monday, 17.00"
calendarFormat:@"%A, %H.%M"];
NSLog(@"aDate %@", [aDate description]);
と、月曜日でインスタンス化した筈なのにログには
aDate Saturday, 17.00 と出てしまいます。
何故でしょう。なんかすごい勘違いやらかしているか、
NSDateの働きを理解しきれてないだけかも
しれませんが、ご助言願います。
- 自己レスです。日付を指定しないとだめらしい
というのがわかってきました。すると、曜日と時間
だけを表現したいときはどうすればいいのだろう。
曜日は文字で表現できるとしても、時刻は計算が
あるから、たとえば、17.40と18.00の計算が必要になるときは
自分で実装しないといけなくなってしまう。
- 時間だけしてして日付を指定しないと、2005.1.1になる。
曜日と時間だけが必要なら、それに応じたオブジェクト
(クラス)を作れということか。インターフェースだけ
決めて、時間の計算はNSDateやNSCalendarDate
のインスタンス(同一日付)を一時的に作成し、そいつらに
まかせてしまう。独言失礼いたしました。
- C++のソースをTerminalからcc main.cp...ってやってもシンボルが
未定義と言われダメだったが、g++ main.cpとするとすんなり
コンパイルされちゃいました。
我ながらahoな質問で申し訳ないのですが、C++のソースってgccじゃ無くて
g++ってコンパイラでコンパイルするのでしょうか?
(g++ってgccの別名だと思っていたが、manを読むと、アップルのgccとg++は
別々のようで、C++はg++でコンパイルするみたいなのですが)
でも、例えばObjective-CとC++のソースを一緒にコンパイルするときは
どちらを使えば良いのでしょう?
まあこれらは試せば良いのであろうが、この辺りの事を記述したドキュメント
ってないものでせうか?
(objective-C++とかobjective-CとC++とを混在させたコーディング
方法については幾つか参照したのですが、コンパイラなどの環境周りに
ついて、余りにも理解不足なので、もう少し勉強したいと思っております)
- 全部同じもの指してるけど
/usr/bin/gcc-4.0
- >>395
レスありがとう。うちはOSはPantherの10.3.9で、gccは3.3です。
因に、/usr/bin/を見てみると、g++もバージョンは3.3ですが、
別物の様なのです。ただ、gccとg++とでファイルのバイトサイズが
同じなので、設定だけが異なるのだろうか?
- >>396
gccでやるときは-lstdc++つけないとC++ライブラリ見に行かないよ。
- >>394
-x オプション。例えば Objective-C++ なら
gcc -x objective-c++ hoge.mm
g++ は gcc -x c++ の別名。-lstdc++ もつけてくれたかも。
ていうかXcodeつかってりゃよきにはからってくれるが。
- >>397,398
なるほど分かりました。助かりました。
ありがとうございます。
- 400
- 「ページ設定」で設定した内容が
NSPrintInfoのsharedPrintInfoのマージンに反映されません。
ttp://www.tech-arts.co.jp/macosx/macosx-dev-jp/htdocs/4500/4597.html
を参考にして、プリント前にimageablePageBoundsを使って
自分でNSPrintInfoにマージンをセットしてやっているのですが、
なんか本末転倒のような気が??
ページ設定のマージンを普通にプリントに反映するにはどうすれば良いんでしょうか?
- NSPanelクラスを使って、ユーティリティウィンドウを作っています。
そのウィンドウのタイトルバーに「クローズ」「最小化」「リサイズ」の
ボタンがありますが、「クローズ」ボタンのみを表示させようと
しています。
そして、タイトル文字列をクローズボタンの方に詰めて
表示させたいのですが、うまくいきません。
HMDTのBBS(http://www.hmdt-web.net/bbs/bbs.cgi?bbsname=mkino&mode=thread&line=50)
には
NSWindowのサブクラス作成
→standardWindowButton:forStyleMask:を上書き
→poseAsClass:でポージング
とあったのですが、NSPanelのサブクラスなので
この方法がつかえません。
どなたか良い方法ご存知でしょうか?
よろしくお願いいたします。
- NSPanel は NSWindow のサブクラスだから
同様の手法が使えないか?
全然試してないんだが。
- poseAsClassでポージングする
standardWindowButton:forStyleMask:
がNSWindowのファクトリメソッドなので
NSPanelがNSWindowのサブクラスということが
生かせないんですよね…orz
- ちょっと興味があったので試してみた。
@interface MyWindow : NSWindow {
}
@end
@implementation MyWindow
-(id)initWithContentRect:(NSRect)contentRect styleMask:(unsigned int)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag{
self = [super initWithContentRect:contentRect styleMask:(NSClosableWindowMask | NSTitledWindowMask) backing:bufferingType defer:flag];
[self _setUtilityWindow:YES];
return self;
}
+(void)load{
[[self class] poseAsClass:[NSWindow class]];
}
+(NSButton *)standardWindowButton:(NSWindowButton)b forStyleMask:(unsigned int)styleMask{
return (b == NSWindowCloseButton) ? [super standardWindowButton:b forStyleMask:styleMask] : nil;
}
@end
こんな感じでどうだろうか?
poseAsClass: の手法は NSWindow の直接のサブクラスでしか使えないということなので、
NSPanel のサブクラスではなく NSWindow のサブクラスにして、
_setUtilityWindow: という隠しメソッドを使う。
- 誰か私のことも思い出してください...
- >>402
別の角度からアプローチしてみた。poseAsClass: は必要なく、普通の手順でプログラムできる
(object_setInstanceVariableなんてdirtyなものを使ってるけど)。
外したボタンのretainCountがあやふやだけどrelease増やすと止まるんでたぶん合ってると思う。
#import <objc/objc-runtime.h>
@implementation MyPanel //NSPanelのサブクラスNSWindowでもたぶんOK
- (void)awakeFromNib
{
//NSFrameView(NSThemeFrame) から minimizeButton と zoomButton を取り外す
id frameView=[[self contentView]superview];
[[frameView minimizeButton]retain];
[[frameView zoomButton]retain];
[[frameView minimizeButton]removeFromSuperview];
[[frameView zoomButton]removeFromSuperview];
[[frameView minimizeButton]autorelease];
[[frameView zoomButton]autorelease];
object_setInstanceVariable(frameView, "minimizeButton", nil);
object_setInstanceVariable(frameView, "zoomButton", nil);
//resetCursorRects ぽいことを行う。もっと良い方法がありそうだが
NSRect fFrame=[frameView frame];
fFrame.size.width++;
[frameView setFrame:fFrame];
fFrame.size.width--;
[frameView setFrame:fFrame];
}
@end
これを実際に使うかと聞かれると、ちょっと恐いけれど(笑)
- >>405
なるほど、_setUtilityWindowを使うってことですか。
確かにできそうですね。できれば正攻法で解決したいところですが
ありがとうございました。
>>407
removeFromSuperviewを使えば確かに
「最小化」「リサイズ」ボタンは外せそうですね。
しかしウィンドウタイトルが左詰めにならないような気がします…。
- >>408
omniのライブラリで似たような事やってたから、参考にしてはどうでしょう?
- NSRaiseErrorってなんでしょう つД`)・゚・。・゚゚・*:.。
起動してもデバッガに落ちます。。。
- さっぱり分からんな。それだけじゃ。
- >>402
NSPanel (およびそのサブクラス)の場合も NSWindow の standardWindowButton:forStyleMask:
を呼んでいるので、NSWindow を poseAsClass すれば良い。
@interface MyPoseWindow : NSWindow
{}
@end
@implementation MyPoseWindow
+(void)load{
[[self class] poseAsClass:[NSWindow class]];
}
+(NSButton *)standardWindowButton:(NSWindowButton)b forStyleMask:(unsigned int)styleMask{
//フローティングウィンドウだったら
if(styleMask & NSUtilityWindowMask && b != NSWindowCloseButton){
return nil;
}else{
return [super standardWindowButton:b forStyleMask:styleMask];
}
}
@end
- poseAsClass にちょっと誤解がある気がしたのでちょっと補足。
基本的に poseAsClass 用に作ったクラスを生成することはない。
元のクラスが作られるときに成り代わって作られるものだから。
>>405 のやり方だと initWithContentRect... を使うすべてのウィンドウ(例えばアバウトウィンドウなど)
が UtilityWindow になってしまうし、すべてのウィンドウの最小化・リサイズボタンが消えてしまう。
- >>412-413
なるほど!
確かにNSWindowをポージングすると
そのサブクラスNSPanelは自動的にポージングされますね。
正攻法な解決策ですっきりしました。
ありがとうございます。
- NSTextFieldの回転方法ってありますか?
グラフの縦軸のキャプションに使用したいのですが…。
- >>415
色々考えてるよりは画像を使った方が早いよ。
- 以前AppleScript (Studio)でやった気がする。
他は知らん
- >>416
>>417
ありがとうございます。手間が掛かるようですね。
416のいうとおり色々考えるより画像使います。
- NSTreeControllerって、なんか中途半端な気が。
setSelectedObjects:(NSArray*)ManagedObjects
とか
ArrangedObjectIndexPathForItem:(ManagedObject*)item
とか
ItemForArrangedObjectIndexPath:(IndexPath*)path
とか
なんで無いんだろう?
-
- バックグラウンドアプリケーション(NSBGOnly=1 がinfo.plistにセットしてある)で
アラートを表示すると、ほかのアプリケーションのウィンドウの下に
アラートが隠れてしまいます。
アラートの表示は現在NSRunAlertPanelで表示しているのですが、
アラートをほかのアプリケーションより前面に出す方法って
あるのでしょうか?
アラートパネルを自前で作るしかないんですかね…?
- アプリケーションを最前面に出してからアラートを表示すれば?
- アプリケーションを最前面に出すってのは、Cocoaで出来ますか?
背面に持っていくのは
[NSApp activateIgnoringOtherApps]で出来るんですが、前面はどうすればいいんでしょう?
- 試してないけどNSAppleScriptで自分をアクティベートさせるスクリプトを実行するとか
まあバックグラウンドアプリでアラートパネルを出そうというのが根本的に間違ってるような気もするけど
- >>423
activateIgnoringOtherApps: で前面に出せるだろ。
- NSBGOnly/LSBackgroundOnlyだと前面に出せなかったような気が。
NSUIElementじゃダメか?
- アラートパネルの属性をScreenSaverにでもあげるのが本筋じゃないか?
- MacOSXにはNotification Managerは無くなったのですか?
- 認証されてroot権限で動いてるアプリのNSLogはどこに出てるんでしょう?
- シングルトンなクラス Hoge を作ろうと
唯一のインスタンスを実装ファイルで宣言した static 変数に入れ、
外からは
[[Hoge sharedHoge] doSomething];
とアクセスできるようにしているんですが、
このインスタンスを release するためにはどうすればいいんでしょうか?
- ↑
単にアプリケーションの最後の dealloc で解放すればいいことに気がつきました。
逝ってきます。
- アプリが終了すると、保有する全てのメモリを自動的に解放するから
別にわざわざ解放しなくても良いよ
- インスタンスが唯一のものにはクラスオブジェクト
を充てているんだけど、それと、
>>430 のように実際にインスタンスを
作るようにする設計との長所短所ってどんな
ことになるんだろ。
- >>433
デストラクタで後始末が出来るってのは長所にならない?
Java等の話だとデストラクタでリソースの解放を行うのは良くないテクニックだと
いわれてるけど、Obj-cだとここら辺はどうなんでしょう。
- Javaで良くないって言われている要因が、解放のタイミングがVMおまかせに
なってしまうてことなら、リファレンスカウントのObjective-Cには当たらないと思う。
- デストラクタで後始末出来るのはスタックにオブジェクトを置ける
C++だろうな。後始末をデストラクタに依存する書き方はC++以外は
やらない方がええんでないか。
- ヒレガス本のカスタムビューの例題で、
文字をボールド体やイタリックで表示させる
チャレンジがありますよね。(p246)
これ、イタリックで表示させると右上が欠けて
しまう。PDFに落としてみるとちゃんと表示
できてるのに、なんでだろ?
- >>437
多分、描画する領域の矩形クリップがノーマルのままなんじゃないかな。
- NSTableViewをクリックしたときに、テーブルの外枠にフォーカスの
フレームが付きますが、それを消したい場合はどうすればよいのか
わかりません。
[NSView drawRect]で描画を自前でやってやるしかないんでしょうか…。
- setFocusRingType: じゃないのかね。
- >>439
IBで出来るだろ。インスペクタのFocus Ring:をNoneにしろ。
- >>438
drawAtPoint:withAttributes: を
使っているんだけど、なんか設定必要なんですか?
- バックグラウンドアプリケーションも含めて、現在起動しているアプリケーションの名前を取得する方法がわかりません。
[NSWorkspace launchedApplications]で取得した
NSArrayの中身は、バックグラウンドアプリケーションは
含まれていないんです。
- ファイルのカタログノードIDを取得する方法と、
そのIDを指定してファイルを開く方法ないですか?
- >>443
ProcessManagerを使う
GetNextProcessでぐぐれ
- それCarbonじゃん。
- スレ違いだなw
- >>455
やっぱりCarbonにお世話になるしかないっすね。
どうもありがとうございます。
- 画像を使用するフレームワークのプロジェクトを作り、
リソースとして画像ファイルを追加したのですが、
この画像ファイルへのパスはどうやって取得するのですか?
つまり、アプリケーションをビルドしたときに
Hoge.app/Contents/Frameworks/Foo.framework/Versions/A/Resources/bar.jpg
という位置に置かれるファイルを、
フレームワーク内で参照するためにはどうすればいいのですか?
[NSBundle resourcePath] 等と書いても、当然のことながら
実行時には Hoge.app/Contents/Resources/ が返ってくるので困っています。
- ↑すいません、補足。
Hoge.app が自分のリソースを参照するときに Hoge.app という名前を知らなくてもいいのと同様に、
Foo.framework も自分の名前を使うことなく自分のリソースを参照したい、ということです。
- framework は作ったこと無いけど
ローダブルバンドルなら
[NSBundle bundleForClass:[self class]]
とかでバンドルを取得してそのバンドルに対して
-[NSBundle pathForResource:]
とかで取れる。
構造的には同じだからこれでいけるのでは?
- あ。
同じじゃないや。
/Contents/
が無いのか。
じゃあ、わかんね。
- NSTextViewのmouseDownメソッドで、クリックされた回数を見ています。
ダブルクリックしたときに、
-mouseDown:(NSEvent*)event
で、[event clickCount]は1を返し
その後すぐに再びmouseDownが呼ばれ
そのときは[event clickCount]は2を返します。
今わたしが知りたいことは、[event clickCount]が1を返した時点で
[event clickCount]が2を返すイベントが、イベントキューに
存在するかどうか?を知りたいのです。
[NSApp nextEventMatchingMask:untilDate:inMode:dequeue:]
では、[event clickCount]が2を返すイベントが来るまで
待たなくてはなりません。
そういった方法ではなく、これから来るイベントがキュー(リスト)として
直接取得できるなら、そこから[event clickCount] == 2 である
イベントをチェックしたいんです。
- >>449
何でリソースをHoge.app/Contents/Resources/に置かないのかがわからん。
どうしてもそこを使いたいならmainBundleを取得して、そこから直接パスを
つなげればいいだろ。
- FAQだと思うのですが、
NSString escape pathでググってソレッぽいのが見つからず、質問します。
Unixコマンドに渡せる、安全なパスを作るのにはどうすればいいでしょうか。
例えば、スペース、クオート文字、日本語などをきちんとエスケープして
渡したいのです。NSURLで出来たものを直接渡して大丈夫なのでしょうか?
- >>454
つ「フレームワーク」
- >>455
NSStringのgetFileSystemRepresentation:maxLength:
じゃ、ダメかい?
- Jedit X やGyazMailのアップデート確認機能って同じframework使ってるの?
Cocoaアプリでよくみるなと思うのだけど
- ILCrashReporter
CrashCatcherなんかがあるよ。
Jedit Xのは知らんけど。
- >>459
>ILCrashReporter
>CrashCatcherなんかがあるよ
これ、クラッシュレポート用じゃないんですか?
- >>457
さんくすです
さっそく試してみます
- SafariでRSSのページを表示したときの、ページのソースを取得したいと思っています。
たとえば、feed://rss.cnn.com/rss/cnn_topstories.rss
などのページのソースを取得したいのですが、NSURLDownloadやNSXMLParserでは
feed:を受け付けてくれません。
何かいい方法がないでしょうか?
- >>462
httpにしちゃえばどうだろう
- そうだよしちゃいなよ
- そうだ、そうだ、それがいい
- >>463-465
httpにしたら、ソースが取得できたっぽいです。
シンプルな解決法すぎて怖いですね(笑)
なんでfeed:って面倒くさいものをSafariは用意してるんだろ…?
すべてhttpでいいのに。
- NSButtonCellのサイズを数値かNSSizeで変更するにはどうすればいいのでしょうか。
NSMatrixとNSButtonCellのサブクラスを作って独自ビュー(NSMatrix)に描画しているのですが、
セルのサイズが小さくなってしまいます。
サイズ変更のメソッドを探しても regular, small のようなものしか扱えないです。
IBから適当なNSButtonをopt+ドラッグしてマトリックスを作ると楽に好きなサイズのセル+マトリックスが作れますが、コードから指定したいのです。
- 見落としていました。
NSMatrixに setCellSize:<#(NSSize)aSize#> なるものが普通にありました。
失礼致しました。
- >>467
-[NSMatrix setCellSize:]
NSControl と NSCell の関係を調べた方がいいと思う。
- Cocoaプログラミングの勉強をはじめました。
InterfaceBuilderで各コントロールをcontrolを押しながら、アウトレットに接続したり(水色線で)する
手順がありますが、このつながりをあとから(他人のnibなどを)客観的に
参照する方法があれば教えてください。
よろしくおねがいします。
- >470
http://www.geocities.jp/svc9826/ss/ib.png
こうとか。
- >>470
インスペクタで普通に調べられるし
- >>471
ネ申発見
- 基本操作でつ
- ありがとうございました
CocoaプロジェクトのなかでCarbonプロジェクトで使っていた
C++クラスを使いたいのですが、h/cppを含めると
error:parse error before "Classname"
のように、クラスすら認識してくれません
Cocoaプロジェクトでは、C++のクラスは使うことができないのでしょうか?
使う方法があったら教えてください
- 拡張子を.mから.mmにする
- Objective-C++でググってみるがよろし。
ttp://developer.apple.com/jp/documentation/cocoa/Conceptual/ObjectiveC/3objc_language_overview/chapter_7_section_10.html
ttp://homepage.mac.com/mkino2/spec/objectiveC++/objectiveC++.html
CaminoはC++/CarbonなGeckoをCocoaで呼んでます。参考になるかな。
ttp://lxr.mozilla.org/mozilla/source/camino/
- ありがとうございました!
日々、精進します
- 取り敢えず、拡張子を.mmに変更。
- あら、リロードすんの忘れてた。
ゴミレス失礼。
- RSSを簡単に生成できるクラスとかありませんか?
- ObjectiveCのカッコについて効果的な入力方法ってありますでしょうか?
例えば(例は悪いですが)
NSString *str = [[NSString stringWithCString:"c"] retain];
の場合、
[NSString stringWithCString:"c"]を入力している時に不意にretainしたくなって、
先頭に[を忘れた時などに、良い入力方法がありますでしょうか?
今はカーソルキーで戻っているのでかなり面倒なんです。
- あるある
- マウスで(ry
- もしよろしければ、その方法をお教えいただけると凄くうれしいです。
- ESC C-p (M-x backward-word)
- >>485
]をマウスでダブルクリック、左キー1回でどうよ。
- >>486
emacsなら、C-M-p(backward-list), C-M-n(forward-list)だろ
- ご返事ありがとうございます。
>>486
そ、それはうちへの答えなんでしょうか?
ちなみにXcodeを使っています。
>>487
なるほど、そういう手もありますね。
[の部分にクリックしない所がミソですか。
メソッドの引数内でない閉じ括弧 ] の後に文が続く時には、
強制的に先頭に[をつける機能が欲しいですね。
例えば(例は悪いですが)
[NSString stringWithCString:"c"] retain]のように開始括弧忘れの場合、
先頭に補完してくれるとうれしいですよね。だめかな?
- cocoaでcarbonのGetQDGlobalsScreenBitsと同等の機能ってあるかな?
screenshot取りたいんだけど。
- >>490
スクリーンショットのサンプルがHMDTにあった。
- >>491
ありがとう
確認してみたけど、これGetQDGlobalsScreenBits使って実現してるね。
だけど、Carbonは使えないんだよね。
- CoreGraphicsもだめかね
http://www.tech-arts.co.jp/macosx/macosx-dev-jp/htdocs/4600/4695.htmlみたいな方法
ちなみにこれもARGBで得られるから
NSBitmapImageRepに流し込む時はRGBAにする必要あり
- >>493
こちらも、THX
試してみる。処理速度的にも良さそうだね。
- ねえねえ、ObjectiveCってヘッダファイルにメソッド定義した場合は
Javaで言うprotectedになって、しなかった場合はprivateメソッドという
考え方で問題ない?
- メソッドの可視性は定義出来ないので、俺様ルール適用。
publicなメソッドはクラスと一緒に、privateなメソッドは
カテゴリ使って別ファイルに定義してる。
protectedなんてシラネ。
- ありがとう
そっか~、ヘッダファイルにメソッドを定義しなくても、IDEのインテリセンスは
効かないけど他のクラスから呼べるんだね。
これが、ObjectiveCの動的型付けのメリット?なんだろうな
カテゴリを勉強して、もう一度来ます
- ねえねえねえねえ!すごいの見つけたよ
http://developer.apple.com/jp/documentation/Cocoa/Conceptual/ObjectiveC/3objc_language_overview/chapter_7_section_7.html
に@privateという記述があるよ。
もしかして、privateなメソッドや変数を定義できるんじゃないの?
やってみるね!
- おおあった
http://developer.apple.com/jp/documentation/cocoa/Conceptual/ObjectiveC/5objc_language_summary/chapter_10_section_5.html
@privateインスタンス変数の有効範囲を、それを宣言しているクラスに限定します。
@protectedインスタンス変数の有効範囲を、宣言しているクラスと派生クラスに限定します。
@publicインスタンス変数の有効範囲についての制約を除去します。
って、ドキュメントに書いてあった。
でも使っているひと居なそうだよね?
- やってみた
orz変数のスコープだけしか関係ないっぽい.......
- ( -ω-)
- (-人-)・・・一人ではしゃいでごめんなさい
- ....いえいえ
- なんかやってみようと思うんですけど何からやればいいですか?
Xcodeってやつをインストールするまではやりました。
- 質問です。
サンプルコードのMoriarityを参考に、NSTaskでstdinからコマンド
のログを取り込むコードを書いています。
NSFileHandleのreadInBackgroundAndNotifyを実行したところ、
バッファがいっぱいになるまでNotificationがこないような挙動が
時々見られます。
別スレッドでNSFileHandleのavailableDataを読んでいるようなの
ですが、これを一定時間経ったら吐き出させてNotificationを起こす
ようにするにはどうすればよいでしょうか。
- >>504
参考程度に、CとPHPをちょっとだけやったことあった自分の辿った道:
アーロン・ヒレガスの本を買ってきて、そこのサンプルを一通りやってみた。
それで基本的なツールの使い方とObjective-Cのやりかたはわかったから、
今はネット上の文献とにらみ合いながら、作りたいものを作ってる。
- >>506
レスありがとう。
あれからグダグダでイライラしながらやってみました。
ボタン押したら文字が出るっていう何の役にも立たないアプリはできた。
これってるすでに書かれてる機能を使って表現してるんですよね?
そういうクラス?がいっぱいあってそれを使って作る感じですか?
- ねえ、やっぱりObjectiveCは難しいよ
何でも出来てしまうオブジェクト指向なので
プログラミングスタイルが掴みにくくないですか?
プライベートメソッドをカテゴリで書いた場合、
そのクラスを使うプログラマに説明しなくてはならないので
解り難く面倒だし、全てをpublicで書くと直接呼び出して欲しくない
メソッドまで公開してしまうことになるよね。
内部のチェックメソッドなんかで、BOOLを返す処理を書いた場合、
そのメソッドをカテゴリでオーバライドされてしまえば、
チェック処理をスルーさせるようなことも可能になるよねー。
どんな設計にしよ~ ふにゃふにゃ
- まずCocoaフレームワークをじっくり眺めて、お手本に汁。
あとカテゴリによるオーバーライドは、メソッドがキャッシュされてるから効かないかもしれないってどこかで聞いた。
扱いきれないならカテゴリなんて使わなければよしw
- 道筋を与えてくれてありがとうー
Cocoaフレームワークってよく整理されてるよね
一個のメソッドにどっかりコーディングしているのかな~
要するに全てのメソッドを公開する前提で設計しなきゃならないって
ことだよねー
ちがうのかな~ ふにゃふにゃ
- >>507
あまりまとまってないけど、とりあえずのやり方。
間違ってたらゴメンして('A`)
先に出したヒレガス本だと、MVCって手法に基づいて作成していっている。
MVCについては http://e-words.jp/w/MVC.html とか。
Cocoaの場合、Viewつまり表示に関する部分は、IBを使って配置していく。
必要な場合には適当なNSView以下のクラスから継承して自分で新しく作ったりするけど、
基本はIBのパレットにあるものをそのまま使う。
ボタンを押したときの動作なんかを受け持つControllerの部分は、
その時々によって適当なクラスから継承して作る。
特に継承するクラスが無いならNSObjectから継承する。
データモデルを扱うModelの部分も同じような感じ。
で、IBを使って、Controllerのインスタンス変数(IBOutlet)やメソッド(IBAction)と
Viewのインスタンス(ボタンとか)との間にコネクションを貼る。
ところで、NSStringやNSDictionaryといった基本的なクラスはそのまま使う。
もしこれらの機能に不満があれば、カテゴリーっていう機能を使って、
そのクラスに新しいメソッドを追加したりする。
具体的なプログラミングの方法は、適当な本でも買ってください( ノ゚Д゚)
- >>508
privateカテゴリの宣言を.mファイルのはじめに記述するというのでは駄目?見かけだけだけど。
- >>508
>そのメソッドをカテゴリでオーバライドされてしまえば、
>チェック処理をスルーさせるようなことも可能になるよねー。
そういうことする奴は設計以前の問題だと思うけど
>>511
MVCといえばこれが良くまとまってます
http://pcweb.mycom.co.jp/special/2005/cocoamvc/
- >>509
心配になったのでランタイムのソース調べてみた。(darwinsource.opendarwin.org)
カテゴリやclass_addMethods()関数でのメソッドの追加・オーバーライドでは
キャッシュはクリアされる。つーか、カテゴリくらいでそんなじゃ困る。
メソッドキャッシュでハマるのって、poseAsClassでのポージングくらいじゃ?
- >>508
お前誰や。馴れ馴れしいな。
先日本語の使い方勉強せい。
- >>515
お前も少し変だぞ w
- >>512
頭の中では想像できないので試してみますね!
>>513
だよねー。でも不特定多数が使うクラスを想定して設計して
みようかとおもってるんだ
>>515
((((;゚Д゚)))ガクガクブルブル ごめんなさいっ
- なお現在のApple版の実装では一端呼び出されたメソッドがキャッシュされているため、動的に追加された新規メソッドが呼び出されるという保証はない。
ってWikipediaにあるけど
ウソ書いてんのかな
- >>511 >>513
レス有り難う、なんとなく解ってきた気がします。
少しですけどここでのお話も解るようになってきました。
色々やって試してみます。
>>510
ふにゃふにゃ
- ヒレガス本てサンプルのソースは全部紙面に出てますか?
HMDT本買ったんだけど、要点の部分だけしか載せてないみたいで。
自分で打ち込みつつ読み進めたいのです。
- >>518
うーん、マルかバツかというと微妙なとこすね。
自分の理解では次のよな感じ。「動的に追加」のやりかたによる。
1.クラス構造体のメソッドリスト(objc_class->methodLists)を直接操作してリストを追加したり、
既にあるメソッド(objc_method)の実体(IMP)や名前(SEL)を置き換えたりしたときはアウト。
2.カテゴリやclass_addMethods()など提供されている機能を利用していればセーフ。
- >>520
基本的にすべて載ってるし、
完成したソースがWEB上にアップされてもいる。
- HMDTもサンプルはWebにアップされてるけど、あの本は入門用としては
いくない。入門用ならヒレガス本以外にお薦め出来る本はない。
- >>523
同意
- レスサンクス。
Amazonでポチることにしました。
本屋にあったのがHMDT本だけだったんですよね。
- privateなメソッドを求めていた者ですが、最終的には原始的は方法に落ち着いちゃった
それは・・・Cの関数を使う事です(^v^)
クラス名_メソッド名();
で関数名の重複を防いで、パブリックメソッドのみ
ObjectiveCを使う事にしました。
Cの関数を使うと完全なグローバル関数になりますが、クラスの利用者からみると
問題ないと思いますのでこの方法で妥協しまーす。
- 工エエェ(´д`)ェエエ工
- もうね、阿呆かと
- パブリックメソッド: ドキュメントに書く
privateメソッド: ドキュメントに書かない
で良いのではないか。
- インスタンス変数はどうするわけ?
>privateな人
- やっぱだめかな?(;´Д`)
>>529
それでも良いんだけど、Xcodeのインテリセンスに出てきてしまうので
間違って使っちゃうかもしれないっしょ。ドキュメントもちゃんとしなきゃだしね
>>530
引数で渡します(^v^)
- ( ゚д゚)ポカーン
- >Cの関数を使うと完全なグローバル関数になりますが、
これが許せて、private宣言できないObj-Cが許せない理由がわからない。
結局何がしたいわけ?
- #pragma mark Private Do Not Use
とか書いとけば。
- Do not press this red button
- >>526
カテゴリーを使ったらどうですか?
CocoaDev: KissyFaceView
<http://www.cocoadev.com/index.pl?KissyFaceView>
- (´Д⊂グスン
>>533
クラス(独自のフレームワーク等)をあるグループに公開する場合、ヘッダファイルと
オブジェクトファイルのみを公開したいと考えています。
そこで、Cの関数だとヘッダファイルでプロトタイプ宣言しなければ、
クラス利用者は、どんなプライベート関数があるかわからない為、
(もちろんアーカイバ等で調べれば解りますが)
安心してパブリックメソッドだけを意識して使ってもらえると考えたのです。
でも、みんなの反応をみていると、あまり良い方法じゃないみたいね
パフォーマンスも稼げて良さそうな感じもするけどどうでしょ?
- >>537
>Cの関数だとヘッダファイルでプロトタイプ宣言しなければ、
「Obj-Cで非公開(private)ヘッダでカテゴリとして宣言すれば、」
もしかして、あなたは、Foundationフレームワーク等には
ヘッダで公開されたメソッド以外存在しないと
思ってらっしゃる?
- publicなクラス定義と実装
Foo.h
Foo.m
privateなカテゴリ定義と実装
FooPrivates.h
FooPrivates.m
Foo.hだけ公開すれば済む話でしょ。
これならコード補完もされん。
- おお、プライベートメソッドはカテゴリで実装するのが一般的なんですね!
>>512さん まだ試していませんでした。
>>536さん 参考にしてみます。
>>538さん どうやって実装しているか解らなかったです。
>>539さん なるほどカテゴリをつかったイディオムがあるんですね。
みなさんありがとう(^v^)
>>496さんの俺様ルールをもう少し深く調べればよかったですね
- まあインスタンス変数を使わない単純な処理かつ、使用頻度が多くていちいち書くのがめんどくさい処理なんかは関数で書くことあるよ。俺も
- >>541
俺はそれに 「static でいける関数」ていう条件を付加してる。
ファイルスコープを越えるのであればメソッド化する。
これは自分への縛りだけど。
- >>542
同様。
昔、まだよく分かってなかったころは、ただの文字列の判定とか変換にもその場のクラスのメソッドを作ってた。
そういうのはNSStringのカテゴリでやればいいことなんだよな。
- >>540
ttp://www.metabolics.co.jp/OpenStep/OpenStepDevelopersDictionary/Category.html
おしまいの「カテゴリのそのほかの使われ方」見れ。
上記ドキュメントの冒頭に >>543 の説明があります。
Cocoaのクラスを継承した妙なクラスを実装するのはよそうな。
- ttp://perl.infoware.ne.jp/documents/Dekiru_CamelBones.html
perlでもできるとは知らなかった。
- 10.4からはNSTextViewでEnterを押したときに入力される改行コードはLF?
それともそれ以前からそうなっていた?
ttp://drycarbon.com/marimo/index.rb?room=droom;memo=Objective-C+%3A+NSString
を読んで、実際10.4でEnter押したときに何が入力されるか見てみたらLFだったので、
ちょっと混乱してます。
- \nで困ったことない
- lfに統一して欲しい
- コマンドラインなObjective-Cを書いているんですけども
NSAutoreleasePoolを作ってこまめに破棄を組み込んでる
ところまで来ました。ここで、ふと疑問が。
コマンドでRUNLOOPを実装するのって意味ないですか?
NSTimerとかってRUNLoopがないと動かないと思うのだけど・・・
適当なサンプルってありますか?
- アプリケーションウィンドウがアクティブになった時と、アクティブじゃなくなった時に
それぞれ、固有の処理をさせたいのですが、何かヒントをいただけないでしょうか!
- - (void)windowDidBecomeKey:(NSNotification *)notification;
- (void)windowDidResignKey:(NSNotification *)notification;
- >>549
ttp://www.tech-arts.co.jp/macosx/macosx-dev-jp/htdocs/700/706.html
こんなんでいいのかな?
- >> 552
こういうのが知りたかったんです。ありがとうございました。
- ありがとうございます。助かりました。
- OSXの標準言語ってObjective-Cなんですよね?
だから、「OSXプログラミング入門にはObjective-C!」
と思ったものの
Developer/Examplesにはいってるサンプルプログラム
.cppの多いこと多いこと
cppってC++のファイルですよね?
結局、これから言語は何を習得すればいいのか分からないです。
目的は、基本的には
Audiounitsプラグインの作成であったり
まあAudio関係のアプリケーションの作成なんだけれど
Windows/Mac両方でてる市販のアプリとかはC++が多いんですよね。
Windowsへの移植とかも考えると、C++の方が良いんでしょうけど、それは今のところ考えてないです。
- OSXの標準言語ってObjective-Cってのは違うような
CocoaがObjective-Cってだけで
CoreAudio関係は基本的にC
- まずCを理解しておくと、Obj-Cは簡単だと思う
- 必要に迫られたら覚えれば良い。
- ObjectiveCってデータベース関連のクラスって揃ってなさそうだね。
CoreDataがそれなのかもしれないが、MySQLやPostgreSQL使う時には
ソースを落としてライブラリを作成しなきゃならんのかな。
その場合、ウニバーサルバイナリはどうやってつくるんだろう。
今から勉強します。
- 調べてないから確かな事は言えんがWebObjectsの歴史があるからあるんじゃない?>>DB用クラス
昔はObjective-Cだったんだろ?
- CoreDataが完全にEOFの機能を内包してくれればいいんだがね。
オレはそれを期待してるんだが。
さもなきゃObjC版のEOFを標準でOSに添付してくれればなぁ。でも
似たようなもの(CoreDataとEOF)ふたつメンテするよりCoreDataに
統合されちゃって欲しいな。
- >CoreDataが完全にEOFの機能を内包
WebObjects抜きでEOFだけ使いたいってニーズがどんだけあるかじゃね?
CoreDataはスタンドアロンが前提なんだからsqliteを選んだのは正解だと思うけどな。
- CoreDataがsqliteだけって勿体無いというか、
カプセル化しているのなら、データベースに
依存して欲しくないですよね。
ttp://gborg.postgresql.org/project/pgsqlcocoa/projdisplay.php
PostgreSQLのラップクラスがありました。でもGPLなので面倒ですね。
Javaなら選択肢が多いのでObjectiveCからJDBCのブリッジを作る
ってのは駄目かな?ユニバーサルにも対応できそうな気がするし。
- NSOpenPanelについての質問です。
NSOpenPanelにsetAccessoryViewで
ファイルタイプを指定するポップアップメニュー付きの
ビューをくっつけました。
その後、NSOpenPanelをrunModalで開いて
ポップアップメニューを切り替えたときに
選んだファイルタイプ以外は、ファイルを選択できないように
したいのですが、うまくいきません。
NSOpenPanelのrunModalForTypesで
オープンする前にファイルタイプを指定するしか
方法はないんでしょうか…
- >>564
-[NSSavePanel validateVisibleColumns]
をよぶと、でれげーとの
-[NSObject panel:shouldShowFilename:]
がよばれるってかいてあります。
りふぁれんすのvalidateVisibleColumnsのこうの
Discussionにあなたがやりたいことが
れいとしてあげられています。
- >>565
ありがとうございます。
できました!
- ★NSComboBoxの不思議
1)NSDrawer付きのウィンドウを作ります。
2)ウィンドウ内とDrawer内にそれぞれNSComboBoxを貼り付けます。
3)ウィンドウ内のComboBoxをプルダウンすると、escキーでプルダウンが
閉じますが、Drawer内のComboBoxはescキーでプルダウンが閉じない。
これはまさにバグですな!!!
アップルだめじゃん。
- Drawerって実装がいまいちな感じがする。
- ドロワーって不要だと思う
- 俺も使わないなあ。
わざわざうにゅるりんって動かしても何の意味も無い。
枠の分スペース食われるし、普通にSplitViewでいい。
- 俺は使ってるよ。使用頻度が低いけど、たまに使うものはドロワーに
入れてる。ボタンとか。メインウインドウに置くのも邪魔だし、ツール
バーに入れるとはみ出すから(操作性が落ちる)、ドロワーがあると助かる。
- >>304
今日このスレを見たんだが、
その本、最近必要になってしまって、
半年前にしかもBookOffで売ったのを後悔している…orz
- 自分の作ったサブクラスからさらに、サブクラスを作ったんですが、
コンパイル時に以下のようなエラーが出ます。
何が考えられるのでしょうか?
error: cannot find interface declaration for 'Subclass', superclass of 'SubSubclass'
- #import "Subclass.h"
- 絶版だけど、この値段で買う奴いるのかな?
ttp://page11.auctions.yahoo.co.jp/jp/auction/n32632178
- いないだろう。Objective-Cの方ならまだわかるけど。
- cocoaはさっぱりな漏れが一個聞きたいんですけど、
トラックボールを転がして、画面を上下左右にスクロールさせるソフトって
cocoaで作れるもんですか。
マイティマウスのクリクリがトラックボールになるような感じ。
- >>577
トラックボール限定にするのは難しいけどマウスやトラックボールが動いたらスクロールさせるってのは出来るよ
- >>578
そっか、限定は難しいですか。ワコムのコレ↓
ttp://tablet.wacom.co.jp/products/smartscroll/smart_index.html
みたいにトラックボールを使えたらな、と思って。
これ、すごく便利なんだけど、ワコムがもうやる気ないらしく、
intelドライバも作る予定無しと・・・。
トラックボールでスクロールできるソフトがあれば漏れはシェアウェアでも欲しいよ。
- >>579
つKensington Mouseworks
- >>580
見てきたけど、ExpertMouseシリーズにスクロールリングってのがついてますが・・・。
これはこのリングを回すとスクロールするって機能だよね。
なんか裏技があるってこと?
- Human interface Guidelineを再販してくれ・・・
- >>582
頭にAquaがついたやつはADCで読めますが
- >>581
そうじゃなくて、Kensington のマウスドライバ(それが Mouseworks)には、
マウス(トラックボール)操作でスクロールさせる機能があるってこと。
だから適当に Kensington のデバイス買って、それを使えば一応やりたいことができますよーって話。
- cocoaからMySQLを呼ぶには一体どないしたらよいのでしょうか。
まだPanther使っています。
SMySQL(http://mysql-cocoa.sourceforge.net/)というフレームワークを入れたんだけど、
"can't open library: /usr/local/lib/mysql/libmysqlclient.12.dylib"
と言われて困っております。
このあとどうすべきでしょうか?
教えて頂けたら有り難いです。
- >>584
アリガトン。ただ、説明しづらいんだけどなんか微妙に違う気がする。
マウス操作でスクロールさせるんじゃなくて、
スクロールさせるためだけの操作って感じ。
プログラムの仕組みを分からんなりに想像すると、
トラックボールデバイスの回転情報を検出して、それに応じた
スクロールをさせるという感じ?マウス座標は全く別で。
マウス座標と、特定のトラックボールの座標を別々に検出できれば
なんとかならないだろうか。
- >>586
分かるよ。スクロールホイールの2次元版ってことでしょ。
昔研究室のMacに、マウスの背中にトラックボールついたやつが繋がってて、
普通に動いてたからドライバいらないのかと思ってたけど。
ちなみにワコムのじゃなかった。
で、どっちにしろCocoaってのは、アプリケーションを作る環境で、ドライバとなると無理なんだわさ。
どっかの神を捜すしかないやね。
- >>587
そっか、ハードウェアの入力がなんとかなりそうだったら、
N88 BASIC経験者の漏れが勉強してみようかと思ったけど難しそうだな。
神の登場を待つよ。でも実現できたら、グラフィックデザイナーや
絵描き系の人にはかなりウケると思うよ。
WACOMのは、バカ高くて、売り方がヘタだったのでコケたらしいので。
ちなみに好奇心で聞くんだけど、ドライバってどういう言語で作られてんの?
- Embeded C++
- >>589
それってかなり敷居高い?
- >>582
PDFならここに残ってるよ。
ttp://web.archive.org/web/*/http://developer.apple.com/techpubs/mac/HIGuidelines/HIGuidelines-2.html
- http://www.steim.org/steim/junxion.html
こんなソフトがあるよ
ちょっと参考資料
本来は、
マウスとかキーボード、ゲームパッド等の操作情報をMIDI信号に変換して、
それらのコントローラーでシンセサイザー等をコントロールするためのソフト
なんだけど、
いろんなデバイスをつないだときに、それぞれのデバイスの入力情報を、OSのカーソルなどとは独立して読み込んでる様が見える
有料ソフトなんでソースは無いけどね
- >>592
サンクス。漏れには手が出せそうにないけど、一応ハードウェアの操作情報を
取り込む事はできるんだなー。
- ヒレガス本って、向こうじゃ第二版が出てるのか・・・
日本語版を片手にちまちまコードを入力したりしているんだけど、
間違っててもほとんど警告もエラーも出ずにコンパイラ通るんだな。
さっきから、§5.5までのコードを入力してコンパイル、実行してたんだけど、
セレクタtableView:~に飛ばないアプリができあがったorz
(↑デバッガで確認。TableViewに何も表示されない・・・)
あがくこと2時間。
どこが悪いかわからず右往左往していたんだが、
該当部分(p.114)を思い切って全部消して入力し直したら正常に動いた!
自由度が高すぎるのも何だかなぁ。
- 第二版は1年くらい前に出てるよ。日本語版は地味に売れてると思うから
第二版出しても損はないと思うのだがなぁ。でも、もう内容が古いかな?
- 次の事柄についてもし情報をお持ちの方がいらっしゃったらどうか教えてくださいm(_ _)m
PantherからTigerに乗り換えたのですが、NSTaleViewの描画方法が変わってしまったのです。
セルの幅以上の文字を表示した時、10.3ではギリギリまで表示していましたが、10.4では"..."が
表示され途中で切れてしまいます。
回避する方法は無いのでしょうか?
多くの情報を表示しているので、セルの幅を大きく出来ず、殆ど"..."しか表示されない
項目もあって困っています。
一般的には問題にならない部分かもしれませんが、どうかよろしくお願い致します。
- >>596
>For applications linked on or after Tiger, NSTableView's (and NSOutlineView)
>default data cell now defaults to using NSLineBreakByTruncatingTail
>for its line break mode. Set -[NSCell setLineBreakMode:] for more information
>on line break modes.
AppKit Release Note より引用
- >>597
ありがとうございます!!
うれしくて涙がちょちょぎれてきました。
早速試してみます! うれしい!
- 日本語訳のヒレガス本持っているんだけど、
次買うとしたら、
・Advanced MAC OS X Programming
・Cocoa Programming for Mac OS X 2nd Ed.
どっちがいいかな?
- NSStringのinitWithContentsOfFile:usedEncoding:error:が使えないもんだから
代わりのものを自力でとりあえず書いて、
UTF-8とISO-2022-JP、Shift_JIS(半角かな無視)は判別するようになったけどEUC-JPで落ちる(´・ω・)
そもそもCがわからない。
Objective-CはCに比べて大分敷居が低いんだと実感した。
Cの本買ってこなきゃ。
- Obj-C書いた後にCやC++のソースを見ると目が疲れる。
- >>600
ちょっと気になったので・・・
文字コード自動判定するメソッド作ってるんですか?
- ヒレガス本、ようやくローカライズの章まで終わった。
途中、よく理解できない部分があったが、もう一度最初から見直してみるかな。
- >>602
作ってたけど、Cに慣れてないのと複雑なのとで即頓挫。
楽に実装したいなら、NSTask経由でPerlのEncode::Guessモジュールを使ったほうがいい事に気づいた。
OSXならPerl5.8も標準でインストールされてるし。
- NSStringのinitWithContentsOfFile:usedEncoding:error:の評判悪いですね。
いろんな場所で機能してないと聞きます。
自分で実装するとなるとやっぱりCが書けると楽ですよね。
データをいじったりする内部的な部分はCの力業に任せて、GUIやコントロールなんかの表面的な部分をObjective-c(API)を使って書けるのがCocoaのが強いところですね。
Cはわかるけど文字コード判別アルゴリズムがわからない。
- >>605
つ ttp://www.gprj.net/dev/tips/other/kanji.shtml
旧方法らしいけど。
ところで、AppKitはソースの公開してないんだよね?
- 追記
UTF-16は先頭がFEFF、FFFEかで判別可。
ttp://www.ffortune.net/comp/develop/data/utf.htm のバリエーションの項参照。
- Windowsのメモ帳はUTF-8にもBOM入れやがるな。
- Cocoaのナレッジベース目的のWikiがあったら需要あるだろうか?
クラス名などで記事にタグ付けしたいから、WikiではなくWordPressのが個人的にはいいかなーと思うんだけど。
- 需要あるかどうかより、自分のしたい事すれば良いじゃん。
- 需要あるに一票
- CocoaDev の日本語版みたいなのがあるといいなぁ
- Photoshopのツールバーのようなキーウインドウにならないフローティングパレットを作りたいんですけど
どのように設定すれば良いんでしょう?
- >>613
NSWindowのサブクラスを作ってisKeyWindowでNOを返す。
>>609
読むだけの需要は沢山あるよ
- >>614
ありがと。
isKeyWindow じゃなくて、canBecomeKeyWindow で NO を返せば目的通り動きました。
- NSArrayControllerで選択中のオブジェクトに対してアクションを送りたいのですが
IB上で設定する方法ってありますか?
- デリゲートのメソッドが動かないのを1日かけて「何故か」と考えていたが、
メソッド名のアルファベット大文字小文字を1字間違えてただけだったorz....
なんとかならんのか…
- 自動補完汁
- http://www.bignerdranch.com/products/core.shtml
↑この本持っている人の感想きぼん…
- >>618
メソッド定義の部分だから自動補完が効かないのよ
- クラスブラウザの該当部分からコピペするってのはどうよ。
- オレはいつもコピー&ペースト
- NSToolbarつきのウィンドウに対して、
そのToolbarだけを描画更新したいのですが、
方法が分かりません。
[NSWindow display]を呼ぶと、描画更新されるんですが
ウィンドウの内部まで描画更新処理が入ってしまい、
処理が遅くなってしまいます。
どなたかご存知でしょうか…?
- とりあえずWikiを建てたので晒しておく。
ttp://aerial.s184.xrea.com/dev/cocoa/wiki/
- >>624
乙やがな
暇があったらおいしいカレーの作り方でも書いておくがな
- >>624
乙
- >>619
amazon.co.jpかamazon.comで見てみればユーザーレビュー出てるだろ。
- 10.4でインフォシークウェブメールチャッカー作成したいのですが・・
プロトコル(WebDAV?)詳しい方教えてください・
- 「チャッカ-」って何?
- Gmail Notifierのように、メールの到着などを通知するものではなかろうか。
- >628
cocoaハヤッパリをみると NSURLDownload で読めそうな感じです~
NSURLConnection でやってみます~
"Notifier"、サンクス。
- 強制的にレインボーカーソルにする事はできますか?
- while(1);
- たしかRunLoopが一定時間超えたら虹色がでるんじゃなかったけ?
ふつうの方法ではコントロールできなかったかと。
- 適当な無限ループ入れりゃいいのでは
- Carbonで自分で作るとか。Cocoaは知らん。
- サンクス。
出来ないと思っていた方が良いみたいですね。
- >628です、
NSURLConnection で読めました、パチパチ!
NSMutableDataの検索方法さがしてます・ふぅ~
- このスレいつも重い
- Wikiに書き込んでくれる人がいてくれて、
ありがたや。
- >637
Spin Control Documents
- CobjectiveCのリテラル文字はretainされるんでしょうか?
NSString *str = @"TEST";
の場合はstrをreleaseする必要があるのかな?
- すみません、こんな簡単な事でageちゃいました。
よろしくお願いしまする。
- rその場合@"TEST"のインスタンスは一つだけ作られて、retainCountはMAXになっていて、
retainもreleaseも意味が無かった希ガス。
一つだけってのは同じ実行ファイルでいくら@"TEST"って書いても一つだけってことね
- そうなんですか、びっくり!
今まで疑問で眠れない日が続いていたんですよね
聞いてよかったです。ありがとうございます!スッキリ
- >>645
もう少し気楽に生きた方が良いと思うな w
- なぜ参照カウントを見てみないのかな?
- やっぱり 森永!!
- Coco ストア!!
- >>645
オブジェクト定数については萩原本に出てるんだけど、これ出版社が
つぶれて入手不能だからなぁ。
- つ http://www.fukkan.com/vote.php3?no=29943
- 古本屋とかにあるんじゃ
- ×萩原
○荻原
- もう「おぎわら」でも「はぎわら」でもどっちでもいいよ!
- 前スレのログが見つかったんで置いといた。
つ http://aerial.s184.xrea.com/dev/cocoa/2ch/1091927026.html
- >目下、同様の内容をカバーする書籍の準備を進めています。詳細は追って報告します
ttp://www.info.kochi-tech.ac.jp/ogihara/software/objc.html
- >>656
お、期待しとこう
ところで「おぎはら」って読むのが正しいの?
- >>657
656の下の方にメールアドレス書いてあるからそれを見ればわかる。
- >>658
いや、それを見て質問したんだw
そういう読み方あまり聞いた事無かったもんで
- それ以前にハギとオギでは漢字自体が違うんだが。
- え?そっちだったの?
「おぎわら」と「おぎはら」だと思ってた
- >>656
おー、こんなページあったんだ。
新本がでるのと、復刊希望100人(現在54人)集まるのとどっちが早いかな?
- >>659
例の本の著者略歴に
荻原剛志(おぎはらたけし)
とあるんで、メアドのとおりだと思うよ。
- >>662
新刊の方が、たとえ遅くても良いかと。
最近追加された、同期や例外構文がフォローされるかもしれないし。
- オブジェクト同期や新しいObjective-C例外処理はアップルでドキュメントが
日本語化されてるからあってもなくてもどっちでもいいよ。
- 最近ようやっとObjective-Cに慣れてきた。
- C++とPowerPlantを忘れつつある
- NSTabViewで、ラベルの文字列の長さに関わらず、
すべてのタブを同じ大きさにするにはどうすればいいですか?
- NSTabViewItemのdrawLabel:inRect:をオーバーライドして、
矩形のサイズを指定してしまうとかかな。
ttp://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/ObjC_classic/Classes/NSTabViewItem.html#//apple_ref/occ/instm/NSTabViewItem/drawLabel:inRect:
- FAQだと思うのですが...
時間指定で動作するアプリケーションを作っています。この中で、処理中はScreenSaverを動かさないようにしたいのです。
動作中のScreenSaverを止めたり、処理中だけScreenSaverが起動しないように操作したいのですが、どこか情報のあるリンクをご存知でしたら教えてください。
- >>669
ありがとうございます。
NSTabViewItemのサブクラスを作り、sizeOfLabel:で任意のNSSizeを返し、
drawLabel:inRect:でNSRectを弄り、文字が真ん中に来るように調節したらできました。
- >>670
http://developer.apple.com/jp/qa/qa2004/qa1160.html
Q: アプリケーションの実行中にシステムがスリープ状態になるのを
回避するにはどうしたらよいのでしょうか。
試してないけどスクリーンセーバーも止まるかも?
- Microsoft製品、たとえばOffice macの
プラグインモジュールとか作ってみたいんですが
どこかそういう情報が載っているページを
ご存知の方いらっしゃいますか?
- sage
- 自作のGUI部品を作って、それをInterfaceBuilderで使うにはどうしたらいいですか。
具体的には簡単なエディタを作ろうとしているのですが、NSTextViewのサブクラスを作って、そこでいきづまりました。
サブクラスをインスタンス化するとProxyオブジェクト?になりますが、それを部品として画面に貼付ける方法がわかりません。
- >>675
まずNSTextViewを画面に配置してから、インスペクタを出してCustom Classで選択。
- >>676に補足。
間違えてNSScrollViewのカスタムクラスを設定しないように注意。
- 暇ならパレット作ってしまうのも手。
http://wwwa.dcns.ne.jp/?nito/OSPT/Palette.html
- >>676,677
さんくす。NSScrollViewをダブルクリックしたらNSTextViewを選択できた。
ダブルクリックがポイントだったのね。
ところで、NSTextViewのサブクラスを作るのが正解なのかどうか、自信がないので相談させてください。
やりたいことは簡単なテキストエディタを作って、キーバインドをカスタマイズしたりとかしようと思ってます。
今はNSTextViewのサブクラスつくって insertText: を上書きすればいいのかなと思ってるんですが、この方針であってるんでしょうか。
もしかしたら、サブクラスを作らなくても、キーバインドを横取りできるような仕組みがあるような気がしてます。Cocoaのクラス設計は秀逸みたいだし。
NSTextViewで発生したキーボードイベントをdelegateするかなんか、そんな方法があれば教えてください。
- http://pcweb.mycom.co.jp/column/osx/103/
- >>679
- (void)textViewDidChangeTypingAttributes:(NSNotification *)aNotification
これじゃだめか?
デリゲートしといて、これインプリメントしてれば来てくれると思うが。
NSTextView使った事無いからマニュアル見ただけだけど。
- すまん、違った
知るだけじゃなかったんだな
これじゃカスタマイズできないわ
- >>679
NSTextView のサブクラスを作って、
- (void)keyDown:(NSEvent *)theEvent
を上書きすれば良いかと、、
CotEditor 等のソースを公開しているソフトを参照してはどうですか?
- ラベルとして使っているTextFieldをいじっています。
ダブルクリックでドロワが開くようにしたいと思っています。
実際にControlをDoubleClickに対応させるためには、
やはりサブクラス作るのがベストですか?
よりスマートな方法はありますか?
透明なボタンを置く、という方法だと、押したときに
白い枠が出来てしまい、うまくありませんでした。
- >>684
ttp://homepage.mac.com/mkino2/cocoaProg/AppKit/NSResponder/NSResponder.html#getDoubleClick
- >> 685
ありがとうございます。試してみます。
- すいません、超初心者です。
簡単なWEBブラウザを作っていろいろと実験しているのですが、
NSMutableURLRequest*request;
request = [NSMutableURLRequest requestWithURL:url];
[request setValue:@"hoge.app" forHTTPHeaderField:@"User-Agent"];
[request setValue:@"hogehoge" forHTTPHeaderField:@"Referer"];
[[webView mainFrame] loadRequest:request];
とやってwebViewに読み込ませた場合、Refererは反映されるのですが、
User-Agentは普通のSafariのものとなってしまいます。
User-Agentを設定するには、なにか別の方法があるのでしょうか?
- setCustomUserAgent:
- WebViewはURLRequestのUser-Agentを、自身のcustomUserAgentで置き換えてからリクエストするのか。
横レスだが参考にした。
-
>> 688
そんな簡単な方法が!
ありがとうございました。
回り道をしていましたが、
NSMutableURLRequest
とか勉強になったので良かったです。
- NSOutlineViewで行をドラッグしたいんですが、左の三角ボタンのあるセルでしか
ドラッグがスタートしません。(それより右側のセルはつかめない)
行のどこをつかんでもドラッグがスタートするようにはできないでしょうか。
- >>691
10.3 以前はそんな感じになる。
10.4 では行の何処を掴んでもドラッグできる。
解決方法は知らない。
- >>691
setVerticalMotionCanBeginDrag:
副作用はあるがYESで一応希望の動きになると思う
- 10.3.9用で作っていたのですが、10.4用に変えたら、確かに
どこを掴んでもドラッグできました。
でもドラッグイメージは一番左のセルだけなんですよね。
>>693
10.3.9で試したんですけど、ならなかったです。
NSOutlineViewはNSTableViewを承継しているのに、
テーブルとしての使用は余り想定されていないのかな。
- Document-based Applicationで保存、読み込みが出来ません。
- (NSData *)dataRepresentationOfType:(NSString *)aType
- (BOOL)loadDataRepresentation:(NSData *)data ofType:(NSString *)aType
ともにオーバーライドしていますが、両方とも親クラス(NSDocument)に実装されている
ダミーの方が呼び出されているみたいです。
以前はそんな事無かったのですが、何か他にチェックすべき点などありますか?
- デフォルトではMyDocumentに割り当てられるはずだけど、
ドキュメントタイプに対応するクラスがNSDocumentになってるとか。
- Deprecated in Mac OS X v10.4.
だから使うのやめなよ
- ほんとだ、Tigerから使えなくなってる orz
代わりに何で保存、読み込みを実装するんでしょうか?
- >>698
マニュアルでdataRepresentationOfType:を見ると
This method has been deprecated. Use dataOfType:error: instead.
と載っているが。
loadDataRepresentation:ofType:は
This method has been deprecated. Use readFromData:ofType:error: instead.
だな。
- 700get
- >>694
自分はCarbon使いなので見当違いの事を書いてるかもしれないけど、
selectしたときのハイライトがminimalで一番左のカラムだけがハイライトされてない?
Carbonだとドラッグを認識させたいカラムに対して
http://developer.apple.com/documentation/Carbon/Reference/databrow_reference/index.htmlの
Property Flags: List View Column Behaviorの
kDataBrowserListViewSelectionColumnを有効にするとminimalでドラッグ出来るようになる。
(実際はIBで設定するけど)
ハイライトがFULLだとまたちょっと違う動作になる。
カラムのハイライトの状態とドラッグは関係があるみたいだから、
その辺で解決できるかも。
- >>699
サンクス。
readFromData:ofType:error: を実装しても動かないから悩んでいたんだけど
なぜかMyDocumentの親クラスがNSDocumentではなくNSPersistentDocumentになってた。
特に変わった事をした覚えは無いんだけど、とりあえずNSDocumentを親にして動くようになりました。
ありがとう。
- NSObject ないし NSObject のサブクラスのインスタンスが2つあるとして、
それらの生成の先後を知ることはできないでしょうか。
どんな形でもいいですので、知る方法があったら教えてください。
具体的には NSMutableArray のインスタンスの生成の先後を知りたいのですが、
これはクラスクラスタなので、
サブクラスを作って生成の時刻を保持させるといった手法は難しいのです。
- NSViewで、描画内容を回転するにはNSAffineTransform等を使いますが、
NSView自身を回転するにはどうすればいいでしょうか。
- やったことないから見当違いかもしれないけど、
サブビューに表示させたい内容を描画させて、
そいつの親ビューに回転の処理をさせるとかかな。
- NSViewに普通に
-(void) rotateByAngle:(float *)angle
というのがあった。。(;´Д`)
http://amb.sakura.ne.jp/hanyou/img-box/img20060227195537.jpg
- >>703
これやってみた?
http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaObjects/Articles/ClassClusters.html
- >>706
試してみた。おもしれ~。
傾いたままで日本語入力変換できるのはおもしろい。
でも、ポップアップメニューはマッスぐ出るのが変。
微妙に傾けると、NSBoxとかの地に干渉縞がでるんだね
- >>706
何気にすげー
- >>701
selectするときは行全体がハイライトされます。でもドラッグするときはセレクト状態とは
関係ないんです。(セレクトしていない行もドラッグできる。)
イベント捕まえて頑張って処理をすればできないこともないんでしょうけど、
なにせめんどくさい。仕様なので仕方ないですね。
- 今更だけどintの範囲はどのくらい?
てっきり32767と思い込んでたんだけど違うのね。
- >>711
sizeof(int)
- >>711
limits.hに定義されているよ。
INT_MAXとINT_MIN
- >>712,713
2147483647ですた。ありがとう。
- autoreleaseが有効かどうかって知る方法ないですか?
バンドル内の関数で、Carbonアプリケーションからロード&呼び出しされた場合だけ
[[NSAutoreleasePool alloc] init] したいのですが。
- 尼損で荻原本の中古を予約してたら、今日出品キタ━━━━(゚∀゚)━━━━!!
- >>715
その他の場合には「したくない」理由ってなに?
- >>717
理解が間違ってるのかもしれませんが、
バンドルの関数A(例えばシートを出す処理)で bundlePool = [[NSAutoreleasePool alloc] init]; して、
バンドルの関数B(例えばシートを閉じる処理)で [bundlePool release]; する場合、
Aが呼ばれ、Bが呼ばれるまでの間に autorelease されたオブジェクトは全て、
bundlePoolにたまってることになります …?よね?
Cocoaアプリの場合は既にあるautorelease poolに任せたほうが効率がいいので、
バンドル内でautorelease poolを作成しないほうがいいのでは、と考えました。
- >>718
>Cocoaアプリの場合は既にあるautorelease poolに任せたほうが効率がいい
初耳。ループなんかで普通に作っちゃ捨てするけどなあ。
- >>717の例で、
例えば、関数Aで [[NSAutoreleasePool alloc] init]; した直後に
何かをautoreleaseすると、実際は関数Bが来るまでreleaseされないので、
それよりはイベントループごとにreleaseされるデフォルトのautorelease poolに
任せたほうがより早く解放されるんじゃないか、という意味です。
…?って書いてて思ったんですが、そもそも2つの関数それぞれで
NSAutoreleasePoolを作成・破棄するのがあるべき方法で、
2つの関数をまたいで作成・破棄しようって考えたのが間違いですね。
どうしてもそうしなきゃいけない状況なんてないでしょうし。
失礼しました。忘れて下さい。
- iPodに何かを書き出す機能を実装するとき、
メソッド名はexportToIPodかexportToiPodのどっちがいいかな?
つまり、iPodのiを小文字にするか大文字にするかなんだけど。
- exportToOsukiniPod
- aipoddoNiKakidasi
- >>721
何があろうと区切りは大文字
- exportTo_iPod:
- アンダーバー
(´・ω・`)イクナイ
- >>723
不覚にも
- export2iPod
- iPod に書き出すなら exportP
ファイルに書き出すなら exportF
- NSTextView に添付された画像の解像度を変えたくていろいろやっているのですが
(要はピクセル数を変更せずに表示の大きさを変えたい)
NSImage やNSImageRepのsize を変えても、コピー&ペーストすると
元の大きさに戻ってしまいます。
解像度を保持させることはできないでしょうか。
- Cocoaははじめて2週間の者です。
オブジェクト指向言語にふれるのははじめてですが、
http://hw001.gate01.com/uochoco/prog/mac/cocoa/doc/obctutor/title.html#contents
のチュートリアルを読んで勉強を進めています。
一つ、分からないことが。
このチュートリアルで、
ConverterController
converter
という2つのクラスを用意していますが、なぜ一つのクラスで
動作を完結させずに、2つのクラスが必要となってくるのでしょうか。
- >>731
MVCって言葉に注目してよく読めば分かると思うけれども。
例えばConverter(の処理)を他のアプリケーションや、同じアプリでも別の場所で使うとするよね。
このときもしConverterがテキストフィールドに直結してあったらどうする?ってこと。
- なるほど。分かりました。
常に同じものをいろいろなところで利用するという
考え方ということですね。
ありがとうございました。
- MacOS X の開発関係のMLとかBBSって
どこが一番盛んですか?
- Xcodeやそのリファレンスアプリに使われてるNSSearchFieldでは
矢印下キーを入力欄中で押すとメニューが表示されるけど、
あれってどうやって実装してるんですかね?
デフォルトではメニューが表示されないみたいですが。
- >>734
スレ的に言えばCocoa-devじゃないの。
>>735
リファレンス嫁
- >>736
setSearchMenuTemplate: で虫眼鏡のアイコンをクリックした際に表示されるメニューは設定できたんですが、
そこから先(入力欄にフォーカスが当たってるときに矢印下キーでそれを表示させる)に悩んでます。
NSSearchFieldのサブクラスを作ってNSMenuの popUpContextMenu:withEvent:forView: を呼び出すしかないんですかね。
- >>737
それはオートコンプリートじゃまいか
- >>738
例に挙げてるものではオートコンプリートでは無いので、気になってるのです。
Xcodeのリファレンスの検索フィールドで下キーを押すと
「API検索」「前文検索」の選択メニューが表示されませんか?
一応解決したのでその方法を書いておきます。
NSSearchFieldのdelegateに control:textView:doCommandBySelector: を実装して、
セレクタが moveDown: のときに
NSMenuの popUpContextMenu:withEvent:forView: を呼び出す。
このとき渡すNSEventは、そのlocationがメニューの表示される位置なので、
それに合わせて適当にでっち上げる。
- >>739
なるほど、普通は虫眼鏡アイコンで表示されるメニューがアローキーでも出るのか。知らなかった。
NSSearchFieldCellのsearchButtonCellをクリックされたことにする、って方法はできないかなあ。
- >>740
それも試してみたんですけど、どうも上手く行きませんでした。
理由が分からない。
- >>711
今気がついたのだがintとlongって両方とも4バイトなのね
OSX上では使い分けても意味無いのかな?
- >>742
悪いことは言わない。longだけ使っとけ。な。64bitで Appleがうまく橋渡しを作ってくれるかわからんだろ。
- ん?
- >>742
悪いことは言わない。4byteと断定するな。
たまたま4byteになっているだけだ。
limits.hを追いかけていけばその辺は書いてある。
- >>742
処理系依存
サイズが問題になる所でintやlongを使っている時点で移植性は劣悪
古いソースを使うを使う場合はやむを得ないが、新しく書く場合はstdint.hに
ある定義を使うべき
- いや、別にそんなたいそうな話じゃなくて、
単にint<longが当たり前だと思ってたからちょっと意外だな、というだけのこと
まあ今後はstdint.hを使うべきなんだろうね
- え、そうなの? 俺は仕事では int=long で10年やってるが…。
- 32bitの処理系なら大抵int=long=32bitじゃないか?
- Macのintはshortの時代が長かったから。
- >>747
C++の規格上は、
short<=int<=long
だ。
- 何故 C++ ?
- たぶん同じだと思うけど、Cの規格は読んでいないから。
- まあ、あれは、矛盾が発生しちゃってるからね。
1, 処理系に最適な大きさ
1, short 以上でかつ long 以下
両方を満たすことは今後どんどん不可能になってくる。
まあ、64bit や 128bit が普通になるなんて思いもよらなかったんだろうけど。
- 矛盾していない。
処理系に最適な大きさは、CPUのビット数がそのまま。
shortとlongには、規格上バイト数の指定は無い。
それにPCのビット数が上がったのは最近だけど、上のカテゴリは昔から大きい。
古い汎用機には、charが8バイト(ビットでは無く)の物もあったりする。
- NSTaskで質問なんだけど、NSPipeを使わないでリダイレクトする方法ってある?
waitUntilExitで実行するとパイプがつまるみたいで止まってしまうもんで。
パイプ詰まりの解消法でも良いです。
- >>756
http://www.qracian.co.jp/index.html
- >>757
禿ワロス
- NSQracianのヘッダはどうすれば手に入りますか
- >756
待たずにループ回せば?
さっぱりだと待つサンプルだけど、appleだとループのサンプルになってるよ。
//readHandleはNSFileHandle、InDataはNSData
while ((inData = [readHandle availableData]) && [inData length]) {
//InDataに各自ホニャララする
}
すんげーはしょってるけどこんな感じ
- 一応Moriarity - /TaskWrapper.hのコードがその解決になってはいる。
BufferがいっぱいになったらNofificationが飛んでくる。
バッファはBSD側で決めたサイズみたいだから、コマンド自体が
パイプで複数つなげたものだと、ダブルバッファになってしまうよ。
- オブジェクトは複数のnibからawakeFromNibを呼び出されることがありますよね。
そのときどのnibから呼ばれたかを知る方法はありますか?
- >>762
ないのじゃないかな?
nib にユニークなアウトレットがnilかどうかで
どの nib が既に接続されているか(awakeFromNib を呼び出したものを含む)
は分かるけど。
- >>763
ありがとうございます。
直接的にawakeFromNibを呼び出したnibを知ることはできないのですね。
それぞれのnibに一意なアウトレットを使う方法も含めて、仕様を考えたいと思います。
- >>757
NSQracianmyQracian=[[NSQracian alloc] initWithFreeDial:@"0120-500-500"];
[myQracian cleanPipe:outputPipe];
こんな感じ?
うまく動かないんだけど...
>>760,761
ありがと
その方法自体は理解してるんだけど同期で処理するのを前提に他の部分を組んじゃってたんで、
なんとかwaitUntilExitで終わらせたかったんよ
readInBackgroundAndNotifyで処理する方向で作り直す事にする
- >>765
FreeDialはNSQracianFreeDialという構造体で定義されている。
- Appleのサンプルコード「SampleCMPlugIn」を元にして
コンテキストメニュープラグインをつくっています。
http://developer.apple.com/samplecode/SampleCMPlugIn/SampleCMPlugIn.html
このサンプルを参考に、テキストエディタ等で選択された文字列に対して
コンテクストメニューで辞書引きなどの処理を行うつもりです。
このプラグインのサンプルでは、コンテクストメニューが開く直前に
以下のような関数が呼ばれます。
static OSStatus SampleCMPlugInExamineContext(void* thisInstance, const AEDesc*inContext, AEDescList*outCommandPairs);
この関数の引数のAEDesc型のデータに、現在選択中のテキストの文字列が
入っているはずなんですが、Carbonアプリではテキストが取得できるのですが
Cocoaアプリではテキストが取得できません。
Cocoaアプリでは、descriptorTypeがtypeNullになっています。
Cocoaアプリからコンテクストメニュープラグインで
選択中のテキストを取得できる方法をご存知の方が
いらっしゃいましたら、教えて頂けると幸いです。
よろしくお願いいたします。
- Xcodeスレかと思ったんだが、ちらっと読んだらcocoaやりましょうよだったんでこっちに投下。
http://www.cocoalab.com/developer.htm
ここで<ttp://www.cocoalab.com/BecomeAnXcoder.pdf>Xcoderになる本なるPDF配布中。
サンプルとかも一応置いてあるので、教えてちょって泣きつかれたらこれを教えて嫌がらせする
のも手かと(だから英語がどうしていやがらせになるんだよ)
- Cell系とMatrixとの扱いに関して解説してる日本語webページない?
できればラヂオボタンやテーブルビューで完結していないので。
HMDTにあったのは簡易的過ぎて物足りない。。
- 自分の書類フォルダにあるファイルの一覧をアウトレットAFieldとしたテキストフィールドに入力したく、このメッセージを書いたのですが、
[AField setStringValue:[directoryContentsAtPath:"?/user/watasi/Documents/"]];
ビルドすると
directoryContentsAtPath is undecleard とエラーが出てしまいます。
objective-Cはさわりたてのため基本的なミスがあるかもしれませんが、
どこがおかしいでしょうか。
- 基本的なミスどころの話じゃない。
Objective-C の文法を一から勉強し直せ。
- >>770
・メッセージの受け手がない。
・cStringになってる。
- >>772
追加で
・返り値の型が違う
- 優しく解説するとこんな感じ。
setStringValueに渡すのはNSString*である必要があります
directoryContentsAtPathはNSArray*を返しますのでここでは渡せません。
また、NSFileManagerのインスタンスメソッドなので
NSFileManagerのインスタンスにつなげないといけません。
また、引数はNSString*でないといけないので、cstringを渡してはいけません。
NSArrayのなかみは何のインスタンスが入ってくるか、確認しましょう。
というところでしょうか。
- まずその「自分の書類フォルダ」へのパスは正しいのかどうか。
- たしかにチルダは展開してくれないな
- 777げとズササーーー
- NSButtonCell の mouseEntered と mouseExited を使いたいのですが、
これって動いてない気がするんですが。。
- >>778
tracking rectは作った?
ttp://developer.apple.com/documentation/Cocoa/Conceptual/BasicEventHandling/Tasks/HandlingMouseTracking.html#//apple_ref/doc/uid/20000907
- NSButtonCell で NSView の addTrackingRect: + mouseEntered: 的なものが出来ないかと試行錯誤してて、
NSButtonCell にも mouseEntered: があるから、てっきり addTrackingRect: 的なメソッドがあると思ったら無くて、どうすればいいのか分からない。
startTrackingAt: なども試してみたけど、やっぱりこれではないようで。
このセルを抱えてる Matrix で addTrackingRect: するのかと思ってやってみたけど、先祖の NSResponder の mouseEntered: / mouseExited: が有効になるだけだった。
- addTrackingRect: を Cell の方から呼べばいいだけだった。
´)⌒´)
´)⌒´) プー ヽ(・ω・)/ ズコー
≡≡≡;;;´⌒)≡≡≡ \(.\ ノ
ただこれ、トラッキング矩形を設定するタイミング難しいね。
- Cocoa勉強会の冊子届いたーヽ( ´∀`)ノ
- 指定されたパスがフォルダなのかパッケージなのか
簡単に判別する方法は無いでしょうか?
- NSWorkspace
- (BOOL)isFilePackageAtPath:(NSString *)fullPath
- NSFileWrapperのinitWithPath:にパスを渡して、返り値がnilかどうかで判別するとか。
自信無いけど。
- だからリロードしろとorz
しかも遅いくせに悪い回答
- >>786
どんまい
- ありがと。こんなに簡単だったとは orz
- PDFファイルからテキストのみを抽出するプログラムを考えています。
OS10.4からPDFKitが用意されたので、それを使えば簡単に出来るのですが
OS10.3でも同じことを実現したいので、PDFKitを使わない方法はないか?と
探しています。
Adobeが公開しているpdfspec.pdfを元に自前で解析するしか
ないんでしょうか?
参考になるサンプルコード等をご存知の方が
もしいらっしゃいましたら、おしえて頂けると
ありがたいです。
- >>782
買う価値ありそう?
- Interface Builder上で作成されたNSTabViewItemにはinitWithIdentifier:が呼ばれないっぽいんですが、
初期化処理をするにはawakeFromNibを使うしかないんでしょうか?
- >>789
Xpdfの中にpdftotextというツールがあります。これを呼びだせばどうでしょ
ttp://www.foolabs.com/xpdf/
- FAQかと。
IB上のインスタンスはNSCoding?でシリアライズされて保存されるから、initは呼ばれないとかだったような。
初期化はawakeFromNibか、NSAppのdelegateのapplicationDidFinishLaunchingをつかう。どっちでやるのがいいかはものによる。
- HMDTのBBSでinitWithCodingが呼ばれるとか何とかと書き込まれてた気がする
- 細かいけどinitWithCoder:だね。
Nibをロードするときに呼ばれる。
- まとめると
IB上でインスタンス化された時点でinitされて、
nibファイルに保存する際にencodeWithCoder:される
で、nibファイルを読み込む際にinitWithCoder:で展開される
という流れだったと思う
- みなさんありがとうございます。
アプリケーションの実行時はインスタンス化されるんじゃなくて
アーカイブされたインスタンスをinitWithCoder:で復元するという形ですね。
ところでIB上で作成したNSViewは実行時にinitWithFrame:が呼ばれてinitWithCoder:が呼ばれないようなのですが、
これはどうしてなのでしょうか。
- >>797
アーカイブするにも、実体が何であるか判らないから。
かな?
まあ、バグには違いないがいまさら直し様がないので、
仕様として逃げ切るしか道がないのだと思う。
initWithCoder: を呼ぶように変更したら発狂する開発者が続出しちゃうよ。
- >>797
NSCoding プロトコルに適合するように作られてないから。
- Cocoaの「Loading Resources」の「What Happens When a Nib File is Loaded」に載ってるよ。
- NSView自体はNSCodingに適合してるのよ。
だけどIB上でNSViewのカスタムサブクラスを配置した場合にnibにエンコードされるのはNSCustomView。
nibロード時にはこれがデコード(initWithCoder:)された後、カスタムサブクラスにinitWithFrame:が送られ、置き換えられる。
そんなわけでframeやhiddenはちゃんとnibに保存されてる。
もちろんカスタムビューがちゃんとNSCodingに適合し、パレットもあるなら別(だと思う)
誰だバグなんて言ってる奴は
- >>801
動作上のバグじゃなくて仕様上のバグ。
- >>802
どの動作を指してバグと言ってるんだ?
Interface Builderが、パレット無いクラスのインスタンスをNibファイルにエンコードしたりデコードしたりできるとでも?
- >>803
だから、動作じゃなくて仕様のバグだってば。
- >>804
仕様がバグだというなら、どういう仕様が正当で、かつ現状の仕様がバグだと言う理由は教えてもらえるんだろうな。
まさか自前のビューがNSCodingに対応しているのにinitWithCoder:が呼ばれないからバグだとは言わないよな。
- >>805
仕様上のバグ:
パレットが確かに存在しているにもかかわらず
CustomView のみが例外扱いされていること。
initWithCoder: で初期化する。
なければ当然、-[NSView initWithCoder:] が呼ばれる。
-[NSObject initWithCoder:] では、実際に自身が Coding されていない場合の処理も必須とする。
- なんで ID:9NTp4+E70 は喧嘩腰なんだろうか……?
- >>806
ちょっと待て、ほんとにパレット作って入れたのにinitWithCoder:呼ばれないってこと?
パレットの作り方間違ってるんじゃないの?
- 自前でパレット作って試してみたが、やはりinitWithCoder:が呼ばれてる。
そもそもパレット作らなきゃ、Interface BuilderがNibファイルを保存するときに
当該インスタンスをエンコードするコードを実行できないわけだから、
当然initWithCoderなんか呼ばれないよね。>>806もそれはバグとは言わないでしょ?
それともInterface Builderが自分のプロジェクトのカスタムビューの実装ファイルを解釈して、
エンコードまでやってくれと言うこと?
あるいはちゃんとパレットを作ったのにinitWithCoder:が呼ばれないということ?
- macosxdevで聞いてみろよ
- やっと家に着いた。
>808,809
じゃなくて、Containers の NSView のことね。< CustomView
誤解させてしまった。すまん。
こいつを使ってNSView のサブクラスをnib で配置しても、
他のパレットを使って NSView の子孫であるサブクラスを nib に配置した時とは、
別の動作をしちゃうでしょ?
例えば、NSImageView のパレットを使って、そのサブクラスを配置すれば、
initWithCoder: で初期化されるけど、
NSView のパレットを使って NSView のサブクラスを配置しても、
initWithCoder: では初期化されない。
これって変じゃありません?
- >>811
CustomViewのCustom Classは存在しないクラス名でも勝手に設定できるから、initWithCoder:
を使っていたらエラーになる。クラスが見つかった時だけinitWithCoder:するのは今以上に混乱をまねく
ので、今の仕様が適切だと思う。
CustomViewを配置したnibのkeyedobjects.nibにNSCustomViewという文字列が入っていた。
これはNSViewのサブクラスでNSString *classNameというインスタンス変数を持つ。
CustomViewでサブクラス化したviewはパレットのあるなしに関わらずNSCustomViewで
codingされるんじゃないかな。で、NSCustomViewのinitWithCoder:が呼ばれ、
その中でclassNameのinitWithFrame:が呼ばれる、と。
デバッガで追えばはっきりするだろうけど。
- >>812
いや、だから動作はどうでもいいの。
後半は蛇足だよ。
エラーになるならなればいいじゃない。
存在しないクラスを使ってればエラーになる。
分かりやすいと思うけど?
実行時に存在しないクラスが必要なの?
- >>813
書いた後で気付いたけどinitWithFrame:でも存在しないクラスではエラーになるか。
CustomViewで指定したクラスがinitWithCoder:で生成される仕様になると、
・initWithCoder:できるクラスはinitWithCoder:
・initWithCoder:できないクラスはinitWithFrame:
と、これはこれで動作が分岐されてしまう。
(そして、initWithCoder:できるクラスをinitWithFrame:で初期化する、という選択肢がなくなってしまう。)
それと、CustomViewで配置すると固有のAttributesは設定できず、NSCoderは空っぽかnilだろう
から、その辺の配慮も必要になる。自作のクラスなら良いがNSImageViewなどではちゃんと初期化できる
保証はないでしょう。
- >>813
ようやく言いたいことを理解したよ。誤解してすまなかった。
確かにNSViewのサブクラス、としてカスタムビューを配置したときはinitWithFrame:なのに、
NSImageViewのサブクラス、としてカスタムビューを配置したときはinitWithCoder:だ。
これを、Nibに配置したビューはinitWithCoder:が呼ばれる、っていう仕様に統一しておいたほうが綺麗だと言えばそうかも。
ただ、そのクラスのencodeWithcoder:が呼ばれたことを前提にはできないね。
これは今も、NSImageViewのサブクラスで独自パレットが無い場合なんかはそうで、
Nib保存時にはNSImageViewのencodeWithcoder:が呼ばれて、実行時にはサブクラスのinitWithCoder:が呼ばれる。
独自にエンコードしてるインスタンス変数がある場合、ちょっと困る(今はNSKeyedArchiverだろうからチェックは出来るか)。
パレットを作れと言われればそれまでなんだけども。
要するに今の仕様は、NSViewのサブクラスで独自パレットを持たないカスタムビュー限定で、
initWithFrame:で初期化する、っていうことになる。
どうせinitWithCoder:を実装したビューだって、標準の初期化処理としてinitWithFrame:は実装しなきゃならないから
これはこれで便利だと思うけどな。
- スレ違いかもなんですが、Xcode1.5、OpenGLでゲーム作ろうとしています。
で、OpenGLのキー取得って役に立たないからOS依存のAPI使うじゃないですか。
そのとき#ifdefとかでWinとMacで呼ぶ関数を変える事ってできましたっけ?
てか、そもそも#ifdefでOSを判別できましたっけ?
- __APPLE__とか
_WIN32とか
- objective-cでコマンドラインツールを書いてます。
getoptで引数/オプションを処理して、日本語パスをargvから復元したいのですが
[self setValue:[NSString stringWithCString:argv[optind]] forKey:@"inputPath"];
とやると当然日本語は受け付けません。
例えばファイル名「テストデータ」は、ターミナルにドロップすると
\343\203\206\343\202\271\343\203\210\343\203\206\343\202\231\343\203\274\343\202\277
となるのですが、これをUTF-8の「テストデータ」に復元したいのです。
どのような方法がとれますでしょうか?
- 追加です。
以下のコードで一応動くことは分かったのですが、これは望ましいやり方なのでしょうか?
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSLog(@"<%@>",[NSString stringWithUTF8String:argv[1] ]);
NSLog(@"<%@>",[NSString stringWithCString:argv[1] encoding:NSUTF8StringEncoding]);
NSLog(@"<%s>", [[NSString stringWithUTF8String:argv[1]] cStringUsingEncoding:NSShiftJISStringEncoding]);
[pool release];
return 0;
}
/*
// うごかない
NSLog(@"<%s>", [[NSString stringWithUTF8String:argv[1]] fileSystemRepresentation]);
*/
- > \343\203\206\343\202\271\343\203\210\343\203\207\343\203\274\343\202\277
復元するまでもなく最初から UTF-8 の「テストデータ」のような気がする。
- 漏れはCocoaの事はさっぱりわからないのだが、
>>818さんはターミナルを日本語ファイル名が表示できる設定にしているのでしょうか?
lsで日本語ファイル名出てきますか?
- つまりはコマンドライン引数の処理ですか?
使ったことないけど、
NSProcessInfoの-(NSArray *)argumentsで
引数を取得できると思うので、これを使ったら
どうでしょう。配列の中身は既に文字列なんで。
勘違いしてたらごめんなさい。
- >>820
確かにstringWithUTF8Stringで復元できるので、そのままUTF-8としては扱えているのですが、これで問題ないのかどうかが・・・
>>821
Tigerなターミナルのデフォルトのままです。日本語ファイル名をlsで表示するにはls -vとする必要があります。でも、ターミナルウィンドウにドロップされたファイル名はエスケープされた状態になり、日本語表示はされません。
>>822
おお!っと思ったんですが、日本語はそのまま表示されません。
テストデータが\U30c6\U30b9\U30c8\U30c6\U3099\U30fc\U30bf
という文字列になります。
- argumentsでは、オプション文字と引数の解析を自前で書かないといけないので、むしろめんどくさいようです。
- >>817
動きました。ありがとうございます。
- テキストファイルを読み込んで、そのテキストファイルの内容を行ごとに
配列に格納するプログラムを書きたいのですが。
まず、テキストファイルを開くには、持っているCocoaの解説書によると
dataWithContentsOfFileでデータを取得し、
エンコーディングを指定して、NSStringを初期化します
とあるのですが、どんなエンコーディングのファイルでも開けるように
するには、全てのエンコーディングに対してNSStringを初期化する
コードを書かなければいけないのでしょうか。
次に、テキストファイルを行ごと、あるいは10行おきなどで配列に
格納する方法が全く分かりません。
よろしくお願いします。
- (1)エンコーディングの問題があるため、テキストファイルを読み込むってのは意外とめんどくさい
(2)行ごとにっていう意味が
パラグラフ毎(改行毎)、という意味なら、改行が見つかるたびにsubstringWithRangeで切り分けるとか、
NSTextViewに流し込んで selectionRangeForProposedRange:granularity
でパラグラフの範囲を算出して切り分けるとか
NSTextViewに表示される際の1行ごと、という意味なら、NSTextViewに流し込み、NSTextViewのレイアウトを管理するNSLayoutManagerを使い、
あるキャラクタインデックス→グリフインデックスに変換 glyphRangeForCharacterRange:actualCharacterRange
グリフインデックスを含む行の四角を算出 lineFragmentRectForGlyphAtIndex:effectiveRange
その四角に含まれるグリフ範囲を算出 glyphRangeForBoundingRect:inTextContainer
そのグリフ範囲をキャラクタ範囲に変換 characterRangeForGlyphRange:actualGlyphRange
で1行のキャラクタ範囲を得ることができるから、それでNSTextViewの文字列を管理するNSTextStorageで1行の文字列を
取得する
- ここらへんの面倒くささをカバーした、汎用性のあるテキスト処理フレームワークとかないのかね
- >>826
参考になりました。ありがとうございました。
テキストの読み込みはめんどうなものなんですね。
- NSString
- (NSArray *)componentsSeparatedByString:(NSString *)separator
で、ざっくりいきませう
- >>829
それが簡単だ!
- >>828
諦めた香りがプンプン
- すまん、783関係無し。
- >>829
改行コードに注意
- >>833
読み込む際にOgreKitで追加されるカテゴリで統一しちゃえばOKだね。
- OgreKitって使ってみたいんだけどPantherだから無理なんだよな…
- >>831
あきらめてません。がんばってみます・・・
- Cで文字列エンコーディング自動判定するコードはありそうだし、Cocoa用にラップしたものもありそうなものだけど
日本語限定なら、片っ端からエンコーディング試して結果の文字数と元のバイト数比較してってのは駄目?
- .stringsファイルからNSDictionaryのインスタンスを得る方法ってありますか?
- 普通にinitWithContentsOfFileでいけたと思う
- >>837
>日本語限定なら、片っ端からエンコーディング試して結果の文字数と元のバイト数比較してってのは駄目?
日本語限定ならTextEditのソースを読めば良いのでは?
すげー読みづらいけど。
>>839
正解
- http://x.nest.jp/mac/060402_0059.htm
> 荻原先生の本、復活です!
http://shop.sbcr.jp/bm_detail.asp?sku=4797333340
http://www.amazon.co.jp/exec/obidos/ASIN/4797333340/
- 荻原本キタ━━━━(゚∀゚)━━━━ッ!!
- >>841
高え~~~
- 今見たら広文社のやつは「4500+税」て書いてあったぞ。
- 内容は進化してるんだろうな?
- 新版じゃなくて復刊でしょ。
- イラネ。
- >日本語で書かれた唯一の Objective-C の本であった、荻原先生による「Objective-C -
>Mac OS X プログラミング入門」。絶版のため、長らく幻の本状態だったけど、復活し
>たようだ!
>「Objective-C Mac OS X プログラミング」と名前を変え、ソフトバンククリエイティ
>ブより発売予定。4/7 の発売なのかな、これは。内容は、前の本そのままではなく、現
>在の状況に合うように改訂されているらしい。
>Cocoa でプログラミングする人なら、必携でしょう!わたしも買うし。
quoted by HMDT
改訂されてるらしい
- むしろ安いと思うが…
何冊刷られるんだろうか?
予約しておいた方がいいかなぁ~
- >>844
そんなに高かったんだっけ・・・
>>849
内容の価値じゃなくて厚みで考えるとせいぜい3000円くらいかな、と思ってたよ
- 買っとこうかな…。でも漏れの場合、C等も含めた入門者向けの本も欲しい。
誰か出してくれないかな。
- iPod.helpみたいなヘルプブックを作成したいのですが、やり方がわかりません。
CocoaBundleで作成すると、.help形式にはなるのですが、ヘルプビューアで開いてみると
何も表示されません。Appleのサイトなどで検索しても、CFBundleHelpBookFolder,CFBundleHelpBookName
をinfo.plistに追加するように、としかないのですが、どなたかやり方をご存知でしたら
ご教授願います。
- (1)Info.plistのCFBundleHelpTOCFileにはじめに表示するhtmlファイル名をいれる
(2)そのhtmlファイルのhead中にname="AppleTitle" content="表示するヘルプの名前"の
META要素を入れる
くらいでとりあえず表示されないすか?
CFBundleHelpBookFolderやCFBundleHelpBookNameはアプリケーションが
ヘルプを探すために使うものなので、アプリケーションのInfo.plistに書くもの
だったと思う。
- >>853さん レスありがとうございます。
CFBundleHelpTOCFile -> index.html としてhtmlのヘッダにMetaタグを埋めて
みましたが、やはり表示はされません。Cocoa Application で作成して、同じ
作業を行うとヘルプは表示されるのですが・・・
.help形式での作成方法ってどこかに乗っていないのでしょうか? ここ3日ほど
探し回っていますが、まったく情報がない状態です。
ライブラリ→documentation→helpと進むとAirMac.helpなどがありますが、これらの
ようにダブルクリックするとヘルプビューアが開けるようにしたいのです。
どなたかご存知でしたら教えてください。
- .helpファイルを
~/Library/Documentation/Help に置いて開いてみてください。
ヘルプビューアは、
・/Library/Documentation/Help
・/Users/ユーザ/Library/Documentation/Help
・登録されているヘルプ
を表示することができます。3番目の登録というのは、
・CocoaアプリのInfo.plistで指定されていて、そのアプリケーションが起動したとき
・[*1]のようなプログラムで登録されたとき
[*1] ttp://developer.apple.com/documentation/Carbon/Conceptual/ProvidingUserAssitAppleHelp/registering_help/chapter_4_section_3.html
に行われます。10.4であれば環境設定のcom.apple.help.plistにヘルプの名前と
場所が記録されているはずです。
- >>853さん
ビルドして出来た.helpを/Library/Documentation/Help の中に
入れたら表示できるようになりました。ありがとうございます。
- Contextual Menu Itemsの作り方を解説したサイトとかありますかね?
- つttp://developer.apple.com/
- Cocoa本、Amazoneから発送通知来たー。
- >>857
>>767のは?
困ってるみたいだけど
- 萩原本届いたー。
あんまし初心者向けではないのね。
でもヒレガス本を読んだ自分には、次のステップとしてちょうど良いレベルだと思う。
- Cocoaでカードゲームを作ろうとしている者です。
今まではWindowsのC++で開発していたのですが、
Macのソフトを開発したくなり、勉強しているところです。
Cocoaでの画像描画のシステムは
・NSViewを継承した自作ViewでdrawRect:で描画する
・OpenGL
などの方法があるようですが、カードゲームでカードの
動きや配置を描画する場合はどのシステムを使って
描画するのがベストでしょうか。
カードをひっくりかえす、回転、移動などはアニメーション
で視覚効果を取り入れたいと考えています。
よろしくお願いします。
- そこまでやりたいなら、Quartz Composerで.qtzのUI作るってのはどうだ?
やりようによっては簡単にできそうだ。
- >>857
Inside Contextual Menu Items, Part 2
http://www.macdevcenter.com/pub/a/mac/2004/06/04/cm_pt2.html
- >>862
OpenGLを知っているならOpenGLの方が楽だと思うけど。
- NSTableViewで、テーブル全体のサイズを変えずにコラムのサイズを変えることはできますか?
ユーザがコラムサイズを大きくしようとして境界をドラッグすると、そのコラムの幅が大きくなって、その代わりに
隣のコラムの幅が小さくなる、(テーブル全体の幅は結果的に変化しない)
という様なことをしたいんですが。
- -(void)setColumnAutoresizingStyle:(NSTableViewColumnAutoresizingStyle)style
かな?引数はConstants見てね。
- >862
ひっくり返すのはOpenGLの方が楽そう
当たり判定はNSBezierPathの方が楽そう
- 萩原って人、Cに詳しくないのかな。
Obj-C本としても大丈夫か心配だなこの本。
- Cに詳しくないって? Cは比較的コンパクトな言語だが?
- 萩原本、昨日書店で見かけたので取り敢えず買った。
パラパラっと見た感じはADCの「Objective-Cプログラミング言語」
で十分だと思った。タダだし。
- 会社で注文してた荻原本来た。
やはり最近の内容になってるね。例外処理も新しいのになってるし
key value codingとかのトピックも増えてる。ただ無理矢理日本語に
されるとかえってわかりにくくなる。
入門書→ヒレガス本(新しい版の日本語版は出ないのか?)
Objective-C→荻原本
で決まりか。あとリファレンス的な本があれば楽になる人もたくさん
いるだろうな。
- >>872
漏れもその組み合わせが良いと思う。
ヒレガス本の第二版が翻訳されないのは悲しいけど。
- もう第3版じゃなかった?
- 復刊.comみたく、邦訳.comが欲しいな。
- リファレンス的な本、とても欲しいっす…。
- >>873
英語っていっても簡単だから、翻訳でなくても大丈夫ですよ。
(もしかしたら、Cocoa知ってるから理解しやすいだけかもしれませんが)
>>874
Advanced MAC OS X Programmingのことですか?
これは第3版じゃないですよ。Advanced、入門ではないです。
はよ第3版だしてほしいものです。
- 新、荻原本イイと思った。
ObjectiveCの言語仕様を解りやすく説明してあるね。
メソッドをインターフェースに公開しないことで、
擬似的なプライベートメソッドの実現や、
Cの関数との組み合わせについて解説があって初心者には
ありがたいと思う。
- するとヒレガス本は、第2版とAdvancedがあるって事ですか。
両方邦訳が欲しいな。
- >>879
http://www.amazon.co.jp/exec/obidos/ASIN/0321213149/qid=1145327033/sr=1-2/ref=sr_1_10_2/503-0038902-1355960
http://www.amazon.co.jp/exec/obidos/ASIN/0974078514/qid=1145327007/sr=1-1/ref=sr_1_10_1/503-0038902-1355960
- Advancedの内容ってどうなってるの?
USだと$44.09か。USから買った方が安いのだろうか? 送料がわからん。
ヒレガス本(2nd Edition)もUSだと$29.69だな。
Core Mac OSX And Unix Programmingってのもあるね。こっちは古いけど。
- 第3版と言えば、中村本のTiger版とか出ないのだろうか。
ヒレガス本の次ぐらいに分かり易いと思う。
- 中村本は初心者向けすぎ。
- HMDTの新版そのうちでるんじゃないか
- HMDTのサイトにはお世話になることも多いが、本の方は残念ながらあまり
いい本とは言えない。Cocoa BindingとかWeb Kitとか新しいトピックがあるから
買ってはいるけどね。次出るとすればCore Data辺りの追加か。
アマゾンではXcode 2.0入門に星五つをつけてる奴がいたな。はぁ~・・・
- HMDTは漏れもダメだと思う。
サイトは読みやすいのに、本になると急に読み難くなる。
- >>885,886
駄目なんだ。
持ってないんで知らなかった。
Cocoaは英語の本ばっかり買うことになってる。
けど読めるのと読めないのがある。英語力だめだめ。
もっと良い日本語本が増えるといいなぁ。
- Cocoaってそんなにええの?
- >>887
ダメってわけじゃないんだけど、良いってわけでもないってこと。
特に初心者には向いてない。
>>888
昔のToolboxとかCarbonに比べたら遥かに楽だわな。Toolbox, Carbonには
まともなテキストエディタすらなかったし(TextEditはダイアログ用だし、
MultilingualTextEngineはバグだらけで仕様もコロコロ変わった)。
でもPictureやRegionがなくなるのは残念。
- 初心者向けはヒレガス本で十分だからHMDT本はもっとマニアックな方向にシフトした方が嬉しいかも
売り上げ減るだろうけど
- >>888
違う文化を味わいたいなら良いかも(笑)
- >>888
Objective-Cを触り始めると、カルチャーショック。
ヒレガス本と合わせて組んでいくと、面白い。
Javaが面倒に思えるから、不思議。
- >>892
メモリ管理を除けば。
Cocoaを使いはじめてから、循環参照バグを何回か食らっている。
んで萩原本によると、gccのオプションにガベコレが追加されていて、
Leopardのランタイム待ちになっているとあるな。
気になる香具師は、man ccを実行して、-fobjc-gcの項を嫁。
- ていうかすでにリファレンスのNSObjectのところに書いてあるし
ビルドオプションにもあった気が
- オプションに-fobjc-gc追加すると、10.5以降でないと実行できないんだろ
- >>895
Appleって過去方向への互換性を無視するから開発者が増えないんだよなぁ
現時点ではターゲット数からみるとMacOSX10.3をサポートしない訳には
いかないのでTigerの機能を使ったソフトってなかなか開発しにくいんだよね。
全てとは言わないけど基本的な部分は過去のOSでも使えるようにして欲しいな。
- たぶん、そんな体力無いでしょ。
- 古いものに縛られると新しいものを取り入れられないからな。Winの方の
開発してる奴なんか未だに98とかMeに縛られて哀れだ。
OS9なんかさっさっと切り捨てるのが吉。ユーザーは減りこそすれ、
増えることはないんだから。
- Winの開発やってるが、
基本的に95/98 with IE4当時で実装されていたAPI以外使ってない。
ちうか、98以降の新しいAPIって何があるんだろうと疑問に思う。
- >>899
Crypt API。 バージョンアップしてるよ。
- >>899
Winよく分からないけど、XML関連とかは?
- Leopardにガーベジコレクタが来るならPantherにも寄越せってのは
流石に無理な要望だろう。
- >>896
OSバージョンにあわせてアプリ作ってインストーラーで対応すればいい
大昔のMac用の市販アプリは古いバージョンのOSまで対応してたのが多いが
おそらくOSのバージョンごとに作り変えてたんだと思う
あのころは使って天国、作って地獄と言われたころだった
今は数売れなくなったので市販アプリではそういうことしなくなったようだけど
- 別に大昔のソフトが古いバージョンのOSまで対応してたわけじゃないと思うけど。
32bit cleanで書いておくというか、Lo3Bytesでマスクするとかしてなきゃ
古いソフトでも大抵動く。
OSバージョンに合わせて作るというのもナンセンス。作りっぱなしならいいけど
動作確認やサポートの手間を考えたらやってられんよ。
- HMDTの人が講師。
Cocoaセミナー初級編開催
http://developer.apple.com/jp/briefing/cocoa1/
5月1日(月)、25日(木)にCocoaによる開発をご検討されているADC Select/Premier会員向けに
「Cocoaセミナー初級編」を開催致します。(参加費無料)
- あぽーに依頼されるなんて、凄いなぁ。
- ヒレガス氏を招待しる
どんな講習になるのか興味津々
- 初級編って事は、中級/上級もあんだろな。ちょっと楽しみ。
- NSViewにNSTextInputを(一部だけど)実装して、text viewを自作してみた。
ことえりでしかテストできてないので、興味ある人がいたら触ってみて。
ttp://aerial.s184.xrea.com/dev/cocoa/test/TextInput-200604230332.tar.bz2
でも未だに入力システム周りの仕組みはまったく理解できてない('A`)
- いけだまさと乙
- 本名出てたかw
まぁいいや。
- 俺も気をつけようw
- 池田君凄いね。
- 当人のサイトで告知されてたが、HMDT 本の新しいのが出るらしいな。
中級以上向けにシフトしたか?
- 赤さんキター
- Third Edition=3版って言うけれど、
第3巻だと思った方が良いのだろうか?
普通は最新版があれば古い版の本はいらないけれど・・・
- >>916
実質的には第2巻じゃないのかな
1,2は持ってないけどこれは買っておく
- 目次
chapter1 Spotlight
chapter2 PDF Kit
chapter3 QuickTime Kit
chapter4 CocoaとXML
chapter5 NSTreeController
chapter6 Core Data: チュートリアル
chapter7 Core Data: 詳 解
chapter8 その他のCocoaの新しいクラス
- いいとこ突いてるな。商売上手だよ。だから買うよ。
- >>917
レスThx!!
CocoaのAPIというか
XCodeを使ったプログラミングについて
初心者相手に説明してくれるような本を探していて、
それでHMDT本はどうなのかなあと思っていたところに
このThird Editionの話が出てきて・・・
新しいのを買えば良いのか、それとも既刊の方を買わないと
既刊で説明済みの部分はThird Editionでは端折られているのか
どうなのかなあと。
- >>920
>XCodeを使ったプログラミングについて
>初心者相手に説明してくれるような本を探していて、
Amazon で Xcode で検索すると、そのものずばりのタイトルの書籍が見つかります。
ただし、あなたがほんとに必要なものかどうかは、
実際に手にとって確かめられることをお薦めします。
- ひょっとして、あの評判の悪い本でしょうか・・・?
あまりに評判が悪くて、自分の目で確認したことすらなかったんですが・・・
こんど探してみます。
- 間違いなくあの評判の悪い本。あの内容ならXcodeのヘルプで間に合う。
- 入門本は入門したら不要
- オンラインヘルプを忌み嫌う人を知ってるし、
書籍であることが重要と思ってる人もいるから、
そういう人には必要なのではないでしょうか?
私には不要ですが。
- なんだかわざとらしいですね
- >>920
一番最初に買うならヒレガス本というのがこのスレの共通認識じゃないかな
HMDTは2は1+アルファなので2を買うなら1は不要
3はまだ出てないけど1,2とは全く違う内容である模様
あと荻原本も買っとけ
今はわからなくてもあとで必ず役に立つ
- プログラミング初心者は C を先に勉強しておいたほうがいいですか?
Xcode入門を見ながらちょっこりいじった後
HMDT に挑戦したら途中で激しく挫折しました
- >>928
Cでプログラムの書き方を習得してからの方がいい。
ここで入門者におすすめのヒレガス本もCの知識が前提。
- マカー向けのC言語の入門書ってあるの?
- 昔は「Learn C on the Mac」の日本語版が良かったんだが今ならどれだろ?
コンパイラもCodewarriorが付いてたし内容も良かった。#DaveMarkさん元気かな?
結城さんの本が初心者には良かったかな?
マカー向けではなくC一般初心者向けだけど。もちろんXcodeでも問題ないよ
- >>930
OS X前提ならUnix環境だし、普通のCの入門書がそのまま使えると思うが…
- そうだな、それこそK&Rで十分OKだな。
Macだからといって気にすることもない。
- 入門書の話題は↓で。おすすめ本の紹介サイトへのリンクも参考に。
推薦図書/必読書のためのスレッド PART30
ttp://pc8.2ch.net/test/read.cgi/tech/1141805746/
Mac向けとなると経験者向けばっかりです。Xcodeの操作方法はさておいて
C言語を学びたいってことならUNIX向けに書かれた本がいいと思います。
ターミナルを利用して、書いてある通りに操作できるはずだから。
- >>931
ありがとう
アマゾンで「C言語 結城」で検索したところ現在購入出来るのは
一冊だけみたいだけど、これでいいのかな?
「Learn C on the Mac」のほうは該当無しでした・・・
>>932,933.934
それが初心者の自分には悩み所なんだよなぁ・・・笑われそうだけど
「Unix環境だし、普通のCの入門書がそのまま使える」
・・・これがよくわかんないのですよ( ´Д⊂ヽ
Xcodeを立ち上げても「C言語」って項目が在る訳ではないようだし
MacでC言語が学べる環境の作り方・・・になるのかな?
これが解ると一歩踏み出せるんだけど・・・
- Xcodeなら、
New Project... → Standard Tool
を選んでプロジェクト作って出てくる画面に、「main.c」ってのがあるから、
その中身を本の通りに書き換えることから始めるといいかも。
- http://www9.plala.or.jp/sgwr-t/
- >>935
Learn C on MacはBookoffの100円コーナーにあったりする
- >>935
Xcodeを立ち上げるんじゃなくて、ターミナル.appを立ち上げる。
ユーティリティフォルダの中にある。
ソースファイルの作成は、テキストエディット.appを使えばOK。
- 初心者向きじゃないけど、古典K&Rだと
#include <stdio.h>
main()
{
printf("hello, world¥n");
}
を書かせてhello.cで保存し
cc hello.c
でコンパイルさせる。
MacのようなUNIX環境なら本の通りにやればいいので、間違える心配が小さい。
だから、UNIX向けのC言語の入門書でいいと思うよ。
入門書なら「C言語入門」Les Hancock 他(アスキー)がいいんじゃないかな。
・・・・と思ったら、ANSI Cじゃないのか・・・ダメだぁ・・・。関数の記述
等が古すぎた。
- しかし、Cの勉強っていうと
いきなりK&Rを薦める人がいるのが多いのは何でだろ。
あれって単なる、ちょっと出来の悪いリファレンスでしか無いと思う。
洋書の方がどうかは知らんけど。中身も古くね?
- 初心者にK&Rを薦めるようなバカはいないだろ。出来の悪いリファレンスって
どういうこと?リファレンスには成り得ないと思うけど。
K&RのKの方の「プログラム作法」を実現したのがCだろ。教科書みたいな
もんだと思う。第2版はANSI Cじゃなかったっけ?
- C言語の勉強と言ったら
「はぢめてのC」しかあり得ないジャマイカ
- >>941
単純な理由。K&RでC(とUNIX)を覚えたから。
入門書なんて、そう何冊も読まないしな。
- >>935
もし、英語に抵抗がなければ、
Programming in Objective-C
が、一応Cの知識を必要としない唯一の本です。
REALBasic から移行した時に参考になったのは、
やっぱりヒレガス本ですね。
その後、Programming in Objective-C が役に立ちました。
あと Cocoa in a nutshell というレファレンス本の前半の
cocoa の紹介が大変役に立ちました。
Xcode入門は私も買いましたが、時間の無駄、お金の無駄でした。
- >>944
こーゆう人のプログラムってひとりよがりで読みにくいんだよね
ttp://www.amazon.co.jp/exec/obidos/ASIN/4894712288/503-5452692-9103166
読んでみんなにやさしいプログラムを書けるようになってくらはい
- >>946
うるせー馬鹿
- 直接 or 間接にレスをくださったみなさん、ありがとうございました。
鼻先であしらわれたらどうしよう、と思っていたので、真摯なレスをいただけてうれしいです。
やはり C 言語の勉強が必要なんですね…。
書店で C 言語の教科書を手に取っても気持ちが萎えてしまうのが常なんですけど、
それはふだん利用しているフリーウェアやシェアウェア(自分にとってのプログラムのイメージ)と、
目の前にある C 言語の世界とが、あまりにもかけ離れているように見えるからです。
いったいこのふたつがどこでどうつながっているのか、わからないのです。
このスレの >>768 で紹介されていた、"Become An Xcoder" という pdf の本が、
そのあたりのことを解説してくれてるのかな? と思いましたが、
全編英語なので二の足を踏んでいてまだ読んでいません。
>>945
>Programming in Objective-C
ちょっと私には難しい感じでしたが、忘れないように amazon のショッピングカートに入れておきました。
あした書店で UNIX 向けの C 言語の入門書をさがしてみます。
ありがとうございました。
- C言語の入門書のサンプルってほんと、何か使えそうなものって作れないもんな…。
一応、学校の生徒のテストの成績の計算みたいなのとか出てくるけど。
そこらへん、スクリプト言語と比べるとヒジョーにキツい。
- Cの教科書のサンプル書く程度であればこれでも良いかも
http://www.apple.com/jp/downloads/macosx/home_learning/friendlyc.html
今のうちにターミナルの操作を覚えておくに超したことはないけどね
- >>949
入門書だから仕方がない…
一通り覚えたら、アルゴリズムの勉強。
- 経験者は何でも「基本からやれ」というもんだが、基本ほどつまらない上に難しいものはないんだよな。
「InterfaceBuilderで線を繋いでアプリを作ってみましょう」とかから始めた方が意欲も長続きする希ガス
- そうですね。そういうところから始めつつ、プログラミングの基本も押さえつつ、
リファレンス的な要素もありつつ、というような本があれば理想。
- 俺もCをターミナルから使うような入門プログラム作って勉強して、
その後突然イベント駆動型の現代的GUIプログラムの勉強始めたときはそのあまりの落差?
にめまいがして何が何やら分からんかった。
まずXcodeみたいな開発環境が何をやってくれるものなのか、イメージで掴めないと分かってこないよな。
普段利用してるソフトを理解したかったら、イベント駆動型とかイベントドリブンという概念を一度勉強したらいいと思いますよ。
- そこでHyperCardですよ
- 何をやるにしてもANSI Cをマスターしないことには、Objective-Cも使いこなせない
わけだが・・・
- ANCI Cの範囲で学習に身が入るようなサンプルって何かないですかね。
GUI無しのプログラムでやる事って言ったらテキスト処理とか
何かのデータの変換処理とか思い浮かぶけど、いずれも範囲を超えてそう。
- 演習本を買えばいいんでないの?適当なサンプルっていっても適当かどうかは
人それぞれだし。
- >>918
欲しい情報ばっか
- Cocoa入門にはまずAppleScript Studioだと思う
- >>957
あなたが何を作りたい(作ろうとしている)かによる
エディタを作りたい人間にmp3エンコードのサンプルは無用だろうし
その逆もしかり
ここまでプログラムやパソコンが普及して
たいがいのコトは既製品でできる状況で
何かに不足を感じてプログラムを始めようと人がいても
その人の嗜好にジャストフィットするサンプルや入門本など不可能に近い
(商業的に絶対成功しない)
で特に具体的な目的がないなら(例えば資格とか)
身が入るかどうかは学ぶ側の問題
というわけで基礎をやれ、という答えしか返ってこない
- Cは読書程度でおk
- とにかくコード書け、読め、真似ろ。
- 始めの取っ掛かりのCの知識については、
CocoaDevCentral の C Language Tutorial for Cocoa ぐらいの内容でいいんじゃないか?
まぁ英語だけど。
ttp://cocoadevcentral.com/articles/000081.php
とりあえずこれ知っとけば、ヒレガス本は読めると思う。
- ネットワークプログラミングやってる人いる?
RoboCupSimulation2Dで遊んでみたくて、
さしあたってUDPでやりとりする鯖とクライアントを書いてみたいんだけれど、
ぐぐっても初心者相手に最初から説明しているようなところは少ないし、
あったとしてもWindows環境用のSocket(WinSockとかいうの?)使ってたり
よく分からんけれど環境が違うせいか簡単なサンプルすらコンパイル出来なかったり・・・
なんか良いサイトとか本とかあったら紹介してくだちいorz
- >>965
ネットワーク用のフレームワークもあったと思うけど
socketインターフェース使ってていいんじゃまいか。
大体同じように書けるはず。
- >>954-955
イベントドリブンというのは、直線的にプログラムが進んで行くのではなくて、
マウス操作などのイベントに応じてプログラムが実行される、みたいな話ですかね。
>>960
AppleScript Studioなら、必要に応じて調べつつ、まあまあ使えますが、
Object - C + Cocoaで何か使えるようになれる気がしません。
>>964
英語ですか…。
それで内容がとてもわかりやすくていいなら頑張る価値があるかもしれませんが、
少々の本代が惜しいわけではないので、
内容的に普通の日本語のCの入門書と同等なら、そっちを選びます。
- >>967
俺は逆だなw
Obj-Cで書けてもAppleScriptで書けん
- >>967
そんなあなたに Cocoaはやっぱり!
ttp://www.big.or.jp/%7Ecrane/cocoa/index.shtml
だいぶコンテンツが減ってしまったので、書籍のほうがいいかも。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4877780890/503-0648617-1191917
- 誰かC is for Cocoaみたいなの書いてよ、日本語で。
- >>970
>誰かC is for Cocoaみたいなの書いてよ、日本語で。
そういうレベルの人はCocoaを使わない方がよいと思う。
- 何でよ?
MacDev増やす気無いの?
- C is ??
- ・C言語
・オブジェクト指向
これを理解すれば(・∀・)イイ!!
- >>973
"She is" と引っ掛けてるんだろ
- "C is for Cocoa" =>「CはCocoaのC」
- 日曜プログラマーにとっては、とりあえずC言語はどうでも良いっす!
とにかくサンプルコードが載っているリファレンスが欲しいっす!
http://www.oomori.com/p/index.html
今はここだけが頼りっす!
- そこはすげー便利。
英語マニュアル読むの面倒だから助かる。
- >>975
ブラッドベリの"S is for Space"や"R is for Rocket"じゃないの?
- んじゃ日本語にすると「コはココアのコ」になっちゃうのか。
- >>967
俺はAppleScript→ObjCって流れたけど、何の抵抗もなかった。
逆は少々難しいらしいけど。(>>968みたいに)
- The ABCs of Unix
http://www.netfunny.com/rhf/jokes/92q3/unixalph.html
- Tiger+XCode 2.2.1で作ってるCocoaなソフトがあります。
10.3.9(PPC)向けのビルド設定にしているのですが、
今度Universal Binary化したいと考えています。
10.3.9(PPC)と10.4.x(Intel)を同一バイナリに入れる
ようなビルド設定って簡単に作れるものなのでしょうか。
それとも、10.3.9(PPC)と、10.4.x(UV)なバイナリは
分けて作らないといけないのでしょうか?
- 立ち読みだから詳しく確認してないが、丁度今書店に並んでるオープンソース
マガジンにそう言うネタがあったような気がする。
- >>983
http://developer.apple.com/jp/documentation/DeveloperTools/Conceptual/cross_development/UniversalBinaries/chapter_4_section_1.html
- 東京だったら、これ行けば? タダだし。
Universal Binaryブリーフィング
http://developer.apple.com/jp/briefing/
・Universal Binaryの概要
・PowerPCとインテル製マイクロプロセッサの違い
・統合開発環境Xcodeとgcc 4.0の説明とUniversal Binaryをつくる手法
- >>986
これってOnline会員でもおk?
- PDFKitで複数のPDFドキュメントを一つにまとめるものを作ろうと思ったけど、
PDFDocumentにはページを追加するメソッドがない。
PDFKitだけじゃぁプレビューでできることぐらいしかできないんだね。
- >>985
さんくすです。うまくいったみたいです。
・・・とは言え、PPCで10.3.9な環境がなく10.4でしかテストできない・・・
ちなみに、ターゲットの情報ウィンドウービルドタブを以下のようにしてあります。
SDKパスとMacOS X デプロイメントターゲットの欄は空欄にしなくてもよい
のかもしれませんが、一応。
アーキテクチャ ppc i386
SDKパス 空欄
MacOS X デプロイメントターゲット 空欄
MACOSX_DEPLOYMENT_TARGET_i386 10.4
MACOSX_DEPLOYMENT_TARGET_ppc 10.3
SDKROOT_i386 /Developer/SDKs/MacOSX10.4u.sdk
SDKROOT_ppc /Developer/SDKs/MacOSX10.4.9.sdk
//
- >>989
SDKROOT_ppc /Developer/SDKs/MacOSX10.4.9.sdk
は
SDKROOT_ppc /Developer/SDKs/MacOSX10.3.9.sdk
の間違いっす。
- >>988
CoreGraphics直接使えば簡単にできる。CGPDFContextCreateでstreamに吐く
context作って、そこにどんどんCGContextDrawPDFPageして行けばよろしい。
- >>991
なるほど、情報さんくす
- >>987
onlineでもOK。5/24が東京は最後らしい。
- inserutPage:atIndex:
dでおk
- 80人もあつまるの?
日本の職業macアプリプログラマーの総人口のような気がするが?
- ここはcocoaのスレ
- ここはcocoaのスレ
- ここはcocoaのスレ
- 999!!!
- 1000!!!!
- このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
This page was generated by Dat2HTML Rev.