- Cocoaはやっぱり!を見て真似してソフトを作ったは良いが、
オリジナルを作ろうと思ったら、全然その先に進めない人集まれ!
親切なプログラマーさんが暇なときだけ教えてくれてる(よね?)
前スレ
Cocoaはさっぱり! http://pc.2ch.net/mac/kako/1007/10076/1007632025.html
Cocoaはさっぱり!version:2 http://pc.2ch.net/test/read.cgi/mac/1036923528/l50
関連スレは >>2
- プログラム関連スレ
Macでプログラミング{3} http://pc.2ch.net/test/read.cgi/mac/1049070432/
MacでC言語 http://pc.2ch.net/test/read.cgi/mac/1048587374/
MacOSX Java総合スレッド http://pc.2ch.net/test/read.cgi/mac/1047361032/
「AppleScript,Perl,Shell」OS Xでスクリプトスレ http://pc.2ch.net/test/read.cgi/mac/1055091471/
Mac OS XをUnixとして使ってる人の為のスレ その5 http://pc.2ch.net/test/read.cgi/mac/1055874672/
XCode http://pc.2ch.net/test/read.cgi/mac/1061702196/
参考リンク
HAPPY Macintosh Developing TIME!
ttp://homepage.mac.com/mkino2/
Cocoa Developer Documentation
http://developer.apple.com/documentation/Cocoa/Cocoa.html
file:///Developer/Documentation/Cocoa/CocoaTopics.html
Cocoaはやっぱり!
ttp://www.big.or.jp/%7Ecrane/cocoa/
- >>1
乙カレー
-
[ >>1 sendMessage: "乙" ];
- >>4
コンパイルエラー
- ■必須ツール
Cocoa Browser(Cocoa API のリファレンス用ブラウザ )
http://homepage2.nifty.com/hoshi-takanori/cocoa-browser/index-j.html
Docoa Browser(上記のWebKit版)
http://www.iwascoding.com/DocoaBrowser/
■便利ツール
Completion Dictionary(ProjectBuilderの入力支援ツール)
http://www.obdev.at/products/completion-dictionary/index.html
- 入力支援ツールならこれも導入しておくと便利。
PBXtra
http://www.versiontracker.com/dyn/moreinfo/VT/16470
- >7
option-M押しても、前単語選択にしかならへん。
- >>8
ReadMeは読んだ?
PBKeyBinding.dictを~/Library/KeyBindings/に
コピーする必要があるよ。
あと、にわかXP厨としてこれも紹介しておこう。
ObjcUnit
http://oops.se/objcunit/
- [[NSThread currentThread] age];
- NSWindowControllerを継承したクラス内で
[window setTitle:@"hogehoge"];
としたら、
そんなもんいきなり使うっていわれてもなー。
といわれましたがなぜなんでしょう?
同じメソッド内で
[self showWindow:self];
が通るのに、不思議。
どちらも継承元のNSWindowControllerで定義されているので
継承したオブジェクトからも使えそうなもんですが。
もしかしてprivateなOutletなのかな?
- >>11
[[self window] setTitle:@"hogehoge"];
なら怒られずに通るような気も。
- NSFileManager を使ってファイル操作をしようとしています。
この際、Finder で不可視のファイルについては操作を加えないようにしたいのですが、
可視/不可視を判定する良い方法は無いでしょうか。
- ヲレも今、FileManagerを読んでいるところなので質問。
ファイル一覧の習得
必要なファイルの確認
一覧をユーザーに掲示
選択されたファイル群を順に処理。
って結局、NSStringファイル名で各行程を受け渡していくしかないのでしょうか?
- >>13
componentsToDisplayForPath:
は駄目だったの?
>>14
話が見えにくいんだが、どう困ってるんだ?
- >>12
ごめんよ、書いてからすぐにクラスブラウザ眺めてて気づいたよ…
でもInterface Builderだとアウトレットのところにwindowって書いてあるのはなんでだろう…
- ついでに質問しまっするが
- (id)initWithFile:(NSString *)aFile
{
self = [self init]; // ←ここでinitWindowNibNameなどを呼び出してる
[[self window] setTitle:aFile];
return self;
}
とやったとき、aFileをretainする必要はありますか?
つまりはsetTitleした時に、ポインタをコピーするのか、それとも
文字列自身の複製を行うのか、どっちなんでしょうかねということなんですが。
- >>17
>とやったとき、aFileをretainする必要はありますか?
ないよ。というか、この場合はレシーバ(NSWindow)側が copy / retain
しなくてはならない。どっちをやってるかは分からないし、関係ない。
いやまあ、俺様も同じことで悩んだのだけれど。
- >>16
NSWindowControllerのリファレンスをよく読もう。
-[NSWindowController window]メソッドを呼ぶまではnibがロードされないのです。
だから、いきなり[window setTitle:@"hogehoge"]とかやっても「そんなもんいきなり
使うっていわれてもなー」ということになるのだ。
- >19
いや、そうじゃなくてNSWindowControllerの宣言が
@private
NSWindow *_window;
になってるからなんだけど。
IBは_windowとか_delegateとかの_を削除するようなしないような不思議な実装になってたよ。
自分で作ったIBのPaletteに_delegate付けたら
delegateと_delegateが同時に現れて変なことになった記憶がある。
- Cocoa・・・Cocoa・・・・・・。
そういや昔、今のSqueakの原型みたいなのが
Cocoaって名前でAppleから出てなぁ・・・。
ふと思い出したのでCocoaスレでネタフリしてみるテスト
- >>20
おそらく
http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Protocols/NSKeyValueCoding.html#//apple_ref/doc/uid/20000471/URLWithPath_ClassMethod_NSPathUtilities
このあたりが関係していると思われ。
- >22
ややこしすぎ。(w
でもこれっぽいね。
どうでもいいが>22のページのアンカーの名前おかしくねーか?
なんでURLWithPath_ClassMethod_NSPathUtilitiesなんだ?(w
一瞬リンクし間違えてるのかと思たよ。
ついでに-valueForKeyのほうはfileAttributes_ClassMethod_NSPathUtilitiesだ。
いやらしく思ったが調べてみた。
http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Java/Classes/NSPathUtilities.html#//apple_ref/doc/uid/20000399/URLWithPath_ClassMethod_NSPathUtilities
http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Java/Classes/NSPathUtilities.html#//apple_ref/doc/uid/20000399/fileAttributes_ClassMethod_NSPathUtilities
これをひな形にしたのかな?
なぜJAVAのリファレンスをひな形にしたのか?
なぜNSPathUtilitiesなのか?
謎は深まるばかりだが。
- >>21
CocoaとSK8とまだウチのHDDに残ってる(藁
が、あんま関係ないぞ(w
- なんだ、関係ないのか。(´・ω・`)
紛らわしい名前付けんなよ > Apple。
しかしながら、>>24のディスク内を
しばらく探険みたいなぁ・・・。ドキドキ
- [[NSThread currentThread] age];
- サーバー側がNSFileHandleConnectionAcceptedNotificaionを使って接続を
受け付ける場合、接続された時のクライアントのアドレスを知る方法って
なにかありますか?
- さっぱり
>>27
無さげ
- >27
Unix的手法ですがgetpeername(2)を使えばいいと思う。
#include <sys/socket.h>
#include <netinet/in.h>
int socket = [filehandle fileDescriptor];
struct sockaddr_in addr;
int length = sizeof( addr );
if( (getpeername(socket, (struct sockaddr*)&addr, &len)) < 0 ) {
// error
} else {
NSLog(@"address->%s¥tport->%u", inet_ntoa(addr.sin_addr),ntohs(addr.sin_port));
}
- プログラム側から自身のアプリを終了したい時はどうすればよいのでしょうか?
NSTerminate:Nowみたいなのがあるのでしょうか?見つけられません。
1アプリ終了を通知(ここが分かりません。誰に何を送れば良いの?)
2「ほんとに?」のダイアログ表示 (NSRunAlertPanelかな?)
3windowを全て閉じる(窓位置を保存)
4後始末処理(applicationWillTerminate ??)
5終了 (??)
みたいな流れになる予定。
- [NSApp terminate:nil]でいいんでないの?
- >>30
>>31+applicationShouldTerminate:だな。
NSApplicationクラスを調べれ
- ありがとうございます。
NSAppというオブジェクトがあるわけですね
しらべてみます。
あと、
applicationWillTerminate:
applicationShouldTerminate:
の区別がつかないかも
- >>33
リファレンス読め
- さぁ、盛り上がって参りました
- 厨な質問ですいません。
秋の夜長にCocoaでもと思い、全く知識が無いままCocoaのお勉強をしようと思う
んですが、今買うとすればCocoaはやっぱり!でしょうか、それともHMDTでしょ
うか?それとも、それ以外でしょうか?教えてください。
- 後発の強みとしては HMDT かなぁ。
あとは荻原本。
- ヒレガス本もオススメ。
- あとは Cocoa のヘッダファイル。
あれが読めないと自分の作りたいものは作れない。
- 英語が読めるならO'reillyのLearning Cocoa with Objective-C 2nd Edition。
内容的にはヒレガス本より初心者向け。
ひとつひとつのチュートリアルが短くて勉強を進めやすい。
ステップアップの仕方もいい感じだし。
初版のイメージでこの本を見ないように。
一から書き直した全く別の本だから。
- >>36-40
ありがとうございます。昨日、部屋を掃除してたら3500円分の図書券が発掘された
もので(w
早速書店で見てきたいと思います。もっとも、田舎なんで全部見れるか分かりませ
んが…お世話になりました。m(_ _)m
- 話題がなくDat落ちしそうなんで。
ソースが見れるから参考になると思う。
http://www.gnustep.org/
- どうもコンパイルが遅いと思ったら、GCCコンパイラ設定の
コンパイラのバージョンでは切り替わってなくて、コマンドラインから
gcc_selectしたらちゃんとプリコンパイルが効くようになってゲキ速になった。
漏れんとこだけかな。
- Cocoaで新しいフォルダを作るときは、
Carbonの助けを借りないといけないの?
あと、使用できるファイル名の最大長はいくつなのでしょうか?
日本語フォルダ名の処理もさっぱりでつ。
- >>44
フォルダを作るにはNSFileManagerのcreateDirectoryAtPath:attributes:を
使うといいと思うよ。ファイル名の最大長は256?
- >45
助かりました。Cocoaのドキュメント探索に、まだ慣れなくて
//CocoaBrowserが、全検索に対応してくれれば、ありがたいのですが。
あと、ファイル名長さは、ファイルシステム依存なようなので、
さがしてみます。
- ここ面白かった。
ttp://kwatch.at.infoseek.co.jp/macosx/objc.html
- >47
ちらっとみたけどどうだかなあって感じ。
id型をオブジェクト型みたいな書き方してるけどそうじゃないだろ。
なんかObj-Cを誤解されそう。
- logファイルリーダーでファイル一覧を出す部分で詰まってます。
ヘッダだけ読み込んで種類別に一覧をだすのですが、ファイル数が
数10になった時点で長時間虹色カーソルになってしまいます。
多数のファイル(の先頭数バイト)を読み込む時のコツってありますか?
セーブプログラム側は、1日に何度かログファイルを作成するプログラムです。
日付け+カウンタでファイル名を決定してセーブしています。
参考になりそうなプログラムソースを探たのですが、Carbonしかみあたらなくて。
似たような実装しているはずなのに。CarbonとCocoaで速度が違う?
- >>49
こんなのだろ?
for (i = 0; i < [array count]; i++) {
NSFileHandle *h = [NSFileHandle
fileHandleForReadingAtPath:[array objectAtIndex:i]];
NSData *d = [h readDataOfLength:16];
[h closeFile];
NSLog(@"%@\n", d);
}
ファイル数1000でG4/400で5秒くらいだったぞ。
時間がかかるのは何か別のとこだろうな。
ファイル数を極端に増やして、Sharkで調べれば一発で分かるぞ。
apple chud sharkでぐぐってみ。
- >49
-(void)readLogAtIndex:(NSNumber*)indexNum
{
unsigned index = [indexNum unsignedIntValue];
id log;
if( 0 > index || index >= [logsArray count] ) return;
log = [logsArray objectAtIndex:index];
...
[self performSelector:_cmd withObject:[NSNumber numberWithUnsignedInt:index + 1] afterDaley:0.0];
}
とか。
- >50,51
ありがとうございます。
どうやらファイルの処理だけにすると、短時間で済むようです。
表示更新関連の処理がまずいのかもしれません。
CHUDインストールしたのですが、まだ原因追跡中です。
- だれかNSSearchFieldの解説して~
- >>53
メソッドはrecentSearches関係しかないじゃん。
あとはNSTextFieldと同じように使える。
カスタマイズしたいんだったらNSSearchFieldCellを使えばよさげ。
- カスタマイズしなきゃいけなさそうなんで、がんばって-setSearchMenuTemplate
あたりを読んでみますー。
- いくら試してもデバッグシンボルを作ってくれない・・・。
プロジェクトを選んで、インスペクタ→スタイル→デバッグシンボルを生成する
で、いいんだよね??
- >56
その逆でデバッグシンボル外せない。。
古いプロジェクトだからか?
- >>56
とりあえず、コンパイルフラグに-gを入れておけば?
>>57
この場合はあとでstripするしかないかも。
- 製作途中のプロジェクトファイルを
Xcodeに乗り換えるときの注意とかありますか?
- >>59
従来のProjectBuilderのターゲットとXcodeネイティブのターゲットがあって、ターゲットをアップグレードするといろいろ新機能が使えたりするらしい。
- Pantherの開発環境にはWebkit SDKはデフォで入ってるの?
- >>61
入ってる。
アップグレードしたら挙動が変わってしまった。直さなきゃ。
- ウケタ
神の言語らしい<Cocoa
ttp://www.geocities.co.jp/Milkyway-Lynx/4133/article/art_13.html
- C++の場合、"戻値の型 クラス名称::メンバ"の形式で記述します。
この"::"が非常に美しくありません。
一体何なのでしょうか?
何故に"::"を選んだのか私には全く理解出来ません。
4個の"黒点"が均等に並んでいます。
:: :: :: :: :: :: :: :: :: :: :: ::
:: :: :: :: :: :: :: :: :: :: :: ::
:: :: :: :: :: :: :: :: :: :: :: ::
:: :: :: :: :: :: :: :: :: :: :: ::
:: :: :: :: :: :: :: :: :: :: :: ::
:: :: :: :: :: :: :: :: :: :: :: ::
:: :: :: :: :: :: :: :: :: :: :: ::
:: :: :: :: :: :: :: :: :: :: :: ::
:: :: :: :: :: :: :: :: :: :: :: ::
殺戮凶器に昆虫の大群です。
不気味極まりないですね。
考えているうちに寒気がしてきました。
……精神病院行った方が良いと思う。
- >>63
狂ってるなw
だが着目点はなかなかおもしろい
- このWebページには理不尽な表現及び不可解な内容が含まれています。
あなたの健全な精神と平穏な社会生活に悪影響を及ぼす場合があります。
このWebページはリンクフリーですが、
過去に大量投稿による荒らしを受けた経緯がありますので
2ch BBS関連の掲示板にはリンクを張らないでください
- 前スレの終わりのほうで馬鹿にされてた日記があったな
- >>63 太陽神のOS
OpenWindowsセッションを開始するとまず、蒼く晴れ渡った画面に
将来のバージョンでは OpenWindows 環境は
サポートされなくなります。
CDE(共通デスクトップ環境)に移行することをお勧めします。
なんとも悲しげな悲壮感漂うメッセージが表示されます(fig5)
OpenWindowsの開発者は手塩に掛けて育て上げたOpenWindowsの打ち切りが決まり
このメッセージを表示するコードを書いた時、どんな気持ちだったのでしょうか。
ほの暗い深夜のオフィスでエディタに向かって最期のメッセージを打ち込む
最期のプログラマの寂しげな後ろ姿が目に浮かび、私は目頭が熱くなりました。
もらい泣きしちゃったYO!
脱線スマソ
- 正直萎えた。。
- イカ
- ネタを書くためにこれだけ勉強するという行為がネタだな。w
- 粉末はなぁ(藁
まぁ、M橋みたいな一見あれな物で毒電波垂れ流してる奴よりはいいけどな。
最初っから毒電波って謳ってるわけだし(藁
でも、Objective-Cに関して着眼点は面白いかもしれないってのだけは同意しとく(w
てか、こいつも歴史認識がいい加減なんだよなぁ(w
- すげぇ
- >そもそも私の頭は十代から叩き込まれたCOBOLとアセンブラでガチガチになっていますので
日本で一番モチベーションの高いCOBOLerだなw
別ページでObjective-C使ってMotif使ってたが、アレもある意味すごいw
- プログラマー板以外でCOBOLerの文字列をみかけるとは……
- NSSearchFieldで苦戦中。
プレースホルダーを変えようとして - setPlaceholderString: を呼ぶとselector not recognized
になる。NSTextfieldでも同じ。ちゃんとヘッダファイルからコピペしたからスペル違いじゃない
はず。なんでだろ。
あと、IBでサーチ範囲のメニューと最近の検索を組み合わせたNSMenuをsearchMenuTemplate
としてくっつけてみると、resentsが追加されるたびにmenuItemのstateがリセットされるから、
ユーザの選んだサーチ範囲の保存に役立たない・・。しかも後でsearchFieldにくっいている
メニューを取得する方法もないっぽい。
サーチ範囲のメニューを選ぶと、選ばれたメニューアイテムのみにチェックをつけ、後の
サーチの時にチェックのついてるメニューアイテムはどれかを調べてその範囲でサーチする、
という実装を目指しているのだけどうまくいきません。
何かヒントがあれば教えてくださいー。
- オリジナルのフォントを/Library/Fontsや~/Library/Fonts以外の
任意の場所(Application.app/Contents/Resourcesとか)に置いて使う
にはどうすればいいんでしょうか?
- >77
エイリアスを置くくらいしか思い付かん。
- あいかわらず、プレースホルダーが変えられません。
setPlaceholderStringを使うには何か前準備が必要なんでしょうか・・・
みんな使えてるの?
- >53
しゃぁねぇなぁ。
そのメソッドを宣言してるクラス名を目をかっぽじってよく見ろ。
継承関係もよく確認しろ。
- >>80
ありがとう、ありがとうございます!
[ [textField cell] setPlaceholderString:@"anString" ]でいけました。感激です。
思い込みって怖いな・・。
あと、メニューから検索範囲を選ぶというのも解決しました。
IBでsearchFieldにMenuTemplateとしてくっつけたメニューにACTIONを設定し、そのアク
ションメソッドの中でMenuTempleteの中のsenderに対応するMenuItem自体にチェックを
つけて、実際に検索する段階ではMenuTemplateの中をどのMenuItemにチェックがついてる
かを確認してその範囲で検索します。
ただ、MenuTempateにチェックをつけるだけでは、現に表示されているメニューには
チェックがついていないので、[sender setState:NSOnState]で、そこにもチェックを
つけておきます。
次からそのメニューにRecentsが加わって更新される際には、MenuTemplateにつけた
チェックがつかわれるので適切に表示されるはず。
・・これでいちおう動いたけど、間違ってたらごめんなさい。
- XCode でプレフィックスヘッダファイルの名称を変更するには
どうしたら良いのでしょうか。
単にファイルの名称を変更しただけでは、
ビルド時に「Missing file or directory: Hoge_Prefix.h」というエラーが出るので、
何処かで設定を変更しなければならないのだと思いますが、
何処で設定したら良いものか分からないのです。
- >>82
プロジェクト->情報を見る->ビルド->プレフィックスヘッダ
では?
- XCodeって書くやつ大杉。
- すいません、質問させてください。
NSSoundを使ってサウンドをループさせて鳴らし続けるアプリを作ろうと思うんで
すが…どうすればサウンドをループさせられるかさっぱり分かりません。
バンドルされたサウンドを、playで再生し、stopを押すまでループさせ続けるとい
う感じのアプリです。
一応コードを書いてみたものの動かしたら止まってしまいました…
聴かぬは一生の恥なんで、右も左も分からないまま書いたコードを貼ります。
#import "application.h"
@implementation application
int stopsound;
- (IBAction)play:(id)sender
{
NSSound *mySound = [NSSound soundNamed : @"sound.aiff"];
stopsound = 0;
while(stopsound = 1)
{[mySound play];
}
}
- (IBAction)stop:(id)sender
{
stopsound = 1;
}
@end
- >>85
こんな感じで。
aSound と repeat はインスタンス変数。
-(IBAction)play:(id)sender{
[aSound release];
aSound=[[NSSound alloc] initWithContentsOfFile:@"/System/Library/Sounds/Glass.aiff" byReference:YES];
[aSound setDelegate:self];
repeat=YES;
[aSound play];
}
-(IBAction)stop:(id)sender{
repeat=NO;
}
-(void)sound:(NSSound *)sound didFinishPlaying:(BOOL)aBool{
if (repeat) [aSound play];
}
- >>83
プロジェクト->情報を見る->ビルドまでは見つかるのですが、
ビルドの中にプレフィックスヘッダを設定する項目が見つからないのです。
プロジェクトファイルの
情報を見る->スタイル->共通設定の中にプレフィックスヘッダを設定する項目があるので、
こちらで新しいファイルの名称を設定してみましたが、
やはり同じエラーが出てしまいます。
- >>87
あ、これはxCodeで0から生成したプロジェクトの場合ね。
PBで作ったプロジェクトだと
プロジェクト->情報を見る->ビルド->共通設定->プレフィックスヘッダをプリコンパイル
っていうチェックが無い?
こいつにチェックを入れてプレフィックスヘッダの名前を入れると
現在の設定の方にも出てくるみたい。
それだとどう?
- >>88
プロジェクト->情報を見る->ビルド
という項目が見つからないのですが……
プロジェクト->情報を見る->スタイル
とは違うのでしょうか?
プロジェクト->情報を見る->スタイル->共通設定の
「プレフィックスヘッダ」にファイル名を入力し、
「プレフィックスヘッダをコンパイル」にチェックを入れてビルドしてみましたが、
やはり同様のエラーが出ます。
- プロジェクトファイルのパッケージの内容を表示させて
project.pbxproj ファイルをテキストエディタで開いて
古いプレフィックスヘッダファイルの名称の書かれている部分を
新しい名称に書き換えることにより解決しました。
- このスレをご覧の、ドライバ開発関係のプログラマの方
【安心】Macで携帯をバックアップ【快適】
http://pc.2ch.net/test/read.cgi/mac/1040172748
上記のスレで、AU用のUSB←→携帯接続ケーブルの
ドライバを有志で書いてくださる方を探しています。
OS Xでの携帯バックアップ環境の充実のためにも
ぜひともよろしくおねがいします。
- >>89
>プロジェクト->情報を見る->ビルド
>という項目が見つからないのですが……
失礼、
ターゲット->情報を見る->ビルド
でした
- >>86
ありがとうございます。早速実装してみたんですが、なぜか2回以上ループしませ
ん…どこか私の設定や記述に問題があったんでしょうか…
- >>93
aSound=[NSSound soundNamed : @"sound.aiff"];
こんな具合にしているのであれば、
aSound=[[NSSound soundNamed : @"sound.aiff"] retain];
こうするとか。
- >>94
ありがとうございます。色々試行錯誤した結果
-(void)sound:(NSSound *)sound didFinishPlaying:(BOOL)aBool{
if (repeat) [aSound play];
}
を
-(void)sound:(NSSound *)sound didFinishPlaying:(BOOL)aBool{
aSound=[NSSound soundNamed : @"sound.aiff"] ;
[aSound setDelegate:self];
if (repeat) [aSound play];
}
に変えたら、ループ再生できました。
しかし、結構な勢いでメモリリークするみたいです…なんかだんだん混乱してきま
した。メモリリークの回避方法を教えてください、お願いしますm(_ _)m
- >>95
これでどう?
-(IBAction)play:(id)sender{
NSSound *aSound=[NSSound soundNamed:@"sound.aiff"];
[aSound setDelegate:self];
repeat=YES;
[aSound play];
}
-(IBAction)stop:(id)sender{
repeat=NO;
}
-(void)sound:(NSSound *)sound didFinishPlaying:(BOOL)aBool{
if (repeat) [sound play];
}
- >>96
それだとやはり2回以上ループしないみたいです。
うーん…どうしたものでしょうか…
- ここらへん詳しくないので適当だけど
delegateの外に出すとまわるっぽい。
-(void)sound:(NSSound *)sound didFinishPlaying:(BOOL)aBool
{
if (loop) {
[self playSound];
}
}
- (void) playSound
{
[snd play];
}
- (IBAction) play:(id)sender
{
if (![snd isPlaying]) {
loop = YES;
[self playSound];
}
}
- (IBAction) stop:(id)sender
{
if ([snd isPlaying]) {
loop = NO;
[snd stop];
}
}
sndの生成はinitとかawake辺りで適当に
- >>98
ひとまずこんなふうにしてみましたが、やはり2回以上回りません…申し訳ありませ
んが添削していただけませんか?改行制限の関係上読みにくくてすいません
#import "DigitalOutEnabler.h"
@implementation DigitalOutEnabler
- (id)init{
[super init];
aSound =[[NSSound soundNamed : @"Sosumi.aiff"]retain];
[aSound setDelegate:self];
return self;
}
-(void)dealloc{
[aSound release];
[super dealloc];
}
-(void)sound:(NSSound *)sound didFinishPlaying:(BOOL)aBool{
if (repeat)
[self playSound];
}
- (void) playSound{
[aSound play];
}
- 続き
-(IBAction)play:(id)sender{
if (![aSound isPlaying]) {
repeat = YES;
[self playSound];
}
}
-(IBAction)stop:(id)sender{
if ([aSound isPlaying]) {
repeat = NO;
[aSound stop];
}
}
@end
以上です、お願いします。
- うげ、XcodeいじりながらCocoa Recipes読んでるけど、
PBと操作性が違いすぎて訳分かんなくなってきた……。
- なんか別スレッドで鳴らしたらうまく行ったけどなんでだろ、こんなん
@implementation SoundTest
- (IBAction)soundPlay:(id)sender
{
isLoop = YES;
[NSThread detachNewThreadSelector:@selector(playLoop) toTarget:self withObject:nil];
}
- (IBAction)soundStop:(id)sender
{
isLoop = NO;
[aSound stop];
}
- (void)playLoop
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[aSound play];
[pool release];
}
- (void)applicationDidFinishLaunching: (NSNotification *)notification
{
aSound = [[NSSound soundNamed:@"sound.aiff"] retain];
[aSound setDelegate:self];
}
- (void)sound:(NSSound *)sound didFinishPlaying:(BOOL)aBool
{
if(isLoop) [NSThread detachNewThreadSelector:@selector(playLoop) toTarget:self withObject:nil];
}
@end
- >102
それで動くんだったら、
>99-100 の- (void) playSoundを
- (void) playSound
{
[aSound performSelector:@(play) withObject:nil afterDelay:0.0];
}
にしても動きそうだね。
- すいません
純正アプリのMainMenu.nibとかってインターフェースビルダーで開けないんですか? 昔開けた気がするんですけど?
- >104
英語リソースのnibファイルのみ開けるはずだよ
どういう仕組みになっているのかは知らんけど
- あぅう ショートカット変えれないのかなぁ。。。
- >>104
nibパッケージの中身を覗いてファイルが3個あればIBで開ける。
英語版から残りの2個をコピーしてくれば開ける可能性はあるが、
正常に編集できるかは保証できない。
- Xcodeを使ってる人に質問。
プロジェクトウインドウとマニュアルウインドウとクラスブラウザと検索とコンソールを
同一ウインドウで表示するにはどうしたらいいんでしょうか。
つまり、ProjectBuilderの「全て一つのウインドウで…」のような操作感にしたいっていうか
そんな一杯ウインドウ開いてられないんだよう!
15”のXGAなんだよう!
すいません。眠いんで取り乱しました。もうねます。
- >>108
そのためのExposeじゃないのか?
- でも、残念ながらエクスポゼでは使いづらいね。
だってウインドウのタイトルを見ないと中身がわかんないから。
フォトショとかはエクスポゼ、快適だろうなあ。
- >>110
写真だからな
- 例外処理ルーチンを書いているんだけど、
アクションメソッドで例外が発生して
そのメソッドそのものを中断したいんだけど、
NS_HANDLER
NS_VALUERETURN(,IBAction);
NS_ENDHANDLER
このNS_VALUERETURNの第1引数は何を入れればいい?
だいたいIBActionの型の実態は何?
- >>112
そういうのはXCodeで調べたい文字列をコマンドを押しながら
ダブルクリックすればすぐ理解るよ。
で、IBActionはNibDeclarations.hで定義されているとおり、
コンパイル時にvoidで置き換えられます。
- Cocoa Document Application(Obj-C)で作ったアプリで
ウィンドウメニューの全てを手前に移動がBring All to Frontになってしまいます。
MainMenu.nibのメニューはちゃんと日本語化しているんですけど。
どこを直せばいいかわかる人いたら教えて下さい。
Mac OS X 10.2.8
Developer Tools Dec.2002
よろしくお願いします。
- >>114
リソースのディレクトリ名もEnglish.lprojじゃなくてJapanese.lprojにしてる?
- NSFileHandleでファイルをある程度の長さのBufferに読み出して
MSMutableDataに追加していくとすると、ファイルの終了時の判定
ってどうすればいいんだい?以下のようにしたらアプリが落ちるん
だが。
NSData *buff;
NSData *endOfFile = [NSData data];
NSMutableData *fileData = [NSMutableData data];
NSFileHandle *file
(中略)
buff = [file readDataOfLength:1]
if (![buff isEqualToData:endOfFile])
{
[fileData appendData:buff];
[buff release];
buff = [file readDataOfLength:1];
}
[buf release];
- >>116
[buff release];
は不要なような気もする。
- >>117
最後の一行だよね。
readDataOfLength:は読み込むファイルの内容がなくなると
空のNSDataオブジェクトを返すからこれをreleaseしたつもりだが。
それとbuildは難なく通るアプリなんだが実行時に
”シグナル 10(SIGBUS)により終了”
とでて落ちるんだけど、どう対処していいんかよく分からないので
どなたか素敵なアドバイスよろしく。
- くわしくはプログラムってよく知らないのですが
いわゆるifって条件が合ってれば中の処理をするんですよね?
つていうか、ファイルの終端をバッファサイドでチェックしてるのが分らない
けど単にグルグル回してファイルの終端で判定すればいいんじゃないのでしょうか?
よくわからないけどforでファイルサイズ分だけ回せばいいのではないでしょうか?
- [buff release];
は両方ともいらんだろ。
allocもしくはretainしてないオブジェクトをrelease/autoreleaseしちゃダメ。
buffをすぐに捨てたいんなら
ループの最初でNSAutoreleasePoolを作って
NSAutoreleasePool*pool=[[NSAutoreleasePool alloc] init];
最後に
[pool release];
解放すれば?
- >>120の言う通り[buff release];はなくすと上手く行きました。
ということは、readDataOfLength:はいわゆる一時的なNSData
を返すということですか?
- >121
返されたオブジェクトのオーナーシップが呼び出し側にあるものは、
[[OneClass alloc...] init...]
[aObject copy...]
[aObject mutableCopy...]
だけです。(alloc... は常にinit... とペアで使わなければなりません。[MUST])
これは自作クラスでも統一するべきです。[SHOULD]??? // MUST かもしれない。
- >>121
readDataOfLength:に限らずalloc以外で作ったオブジェクトは全てautoreleaseされます。
オーナーシップポリシーについてはあちこちで説明されてるので調べてみよう。
あ、fileDataもほっとくと消えちゃうよ。
後で使いたいときはretainしておくこと。
- >>115
>リソースのディレクトリ名もEnglish.lprojじゃなくてJapanese.lprojにしてる?
回答いただきありがとうございます。
nibファイルは全部グローバル化しています。~.lprojに入れておかないと
だめなんでしょうか?
- English.lprojしかなかったら英語モードでしか起動できないじゃろ。
一部のメニューが英語で表示されるのは当たり前。
- いえ、English.lprojもないんです。全部グローバル化しています。
グローバル化している場合には英語モードで起動しているんでしょうか?
- "global"と"localized"の意味をを辞書で調べてから出直してこい。
- ( `3´)めんどクセェー
>>126
これに限らずメリケンのいうグローバルってのはアメリカであり英語ってことだ。
日本語モードで起動させたきゃ大人しくJapanese.lproj作りなさい。
- >>122,123
"自分で生成したオブジェクトは、自分で解放する "
というのが鉄則のようですね。
それゆねにalloc...,init...,copy....,mutableCopy...
といった自前で生成したオブジェクトは自分で解放
するということですね。
では、readDAtaOfLength:によって返されるオブジェクトは
NSFileHandleのオブジェクトがオーナーと言うことになりますが、
返されたオブジェクトはどのタイミングでreleaseされてるので
しょうか?やはり返す前にautoreleaseしてるんでしょうか?
どこまで保持されるのかよく分からないので。返した後に参照後
即releaseされるのか、返されたルーチンが終了時に消えるのか?
関連することだと思いますが、オブジェクトを返すメソッドは
return [[[object alloc...] init....] autorelease];
とすべきなのでしょうか?
- 返す前にautoreleaseしてる
もしくは
NSFileHandleにオーナシップが移らないメソッドでNSDataのインスタンスを生成した
後者の場合はNSDataクラスの中で既にautoreleaseされてる。
- >129
>どこまで保持されるのかよく分からないので。返した後に参照後
>即releaseされるのか、返されたルーチンが終了時に消えるのか?
普通は考えなくて良いです。
メソッド抜けてからも使うのであれば保持、使わないのであればそのまま放っておく。
別にオーナーが複数あっても問題はありません。すべてのオーナーがいなくなった時点でdeallocされます。
返されたオブジェクトが他のオブジェクトに所有されている可能性がありますので勝手にreleaseしてはいけません。
>return [[[object alloc...] init....] autorelease];
使わないのであれば
return [aObject autorelease];
で良いです。
保持している必要があり、かつ他のオブジェクトによって変更されてもいいのなら
return aObject;
でもいいです。
変更されるのがいやなら
return [[aObject copy] autorelease];
とか、専用のクラスメソッドがあるなら、
return [NSArray arrayWithArray:aArray];
みたいな。
- オリジナルのフォントを任意の場所に置いて使う方法やっとわかった。
起動時に(Carbonの)ATSFontActivateFromFileSpecificationを一発呼んでやればよい。
後はNSFontManagerで目的のNSFontが得られるようになる。
- >>132=すばらしい
- 例外処理の部分でトラブってるんだけど、
*** Exception handlers were not properly removed.
Some code has jumped or returned out of an NS_DURING...NS_HANDLER region without using the NS_VOIDRETURN or NS_VALUERETURN macros.
とでてとまってしまう。これはNS_DURING...NS_HANDLER間は
return;で返すんじゃなくて必ずNS_VOIDRETURN;または
NS_VALUERETURN;で返す必要があるってことでしょうか?
- >134
うん。
- ClassAはClassB.hをインポートしていて
- (id)method{
return [[[ClassB alloc] initWithClassA: aClass] autorelease];
}
というメソッドがあって、
ClassBはClassA.hをインポートしていて
- (id)initWithClassA: (ClassA*)aClass{
[super init];
item = [aClass retain];
return self;
}
と初期化する場合にfatal error: method definition not in class context
というエラーがでるのですが、どのように修正すればよいものでしょうか?
- + (id)method
- >>137
簡略して書きましたが、実際にはmethodでClassBを生成する際
自分自身のインスタンス変数を引数としています。
なので出来ればクラスメソッドではなくインスタンスメソッドにしたいのです。
- んじゃClassAの方でClassBを生成させるんじゃなくて、
ClassBの方に
+ (id)classBWithClassA:(ClassA *)aClass {
return [[[ClassB alloc] initWithClassA: aClass] autorelease];
}
かな。
- >>139
ありがとうございます、そうしてみます。
しかし、Smalltalkでは問題なく動作するのに
なんでObjective-Cだとエラーになっちゃうんでしょうね。
- >>136
普通にできますけど?
> fatal error: method definition not in class context
これって、括弧の閉じ忘れじゃないの?
>しかし、Smalltalkでは問題なく動作するのに
>なんでObjective-Cだとエラーになっちゃうんでしょうね。
比較する意味なし。
- >>141
試しに
- (id)initWithClassA: (ClassA*)aClass
の部分を
- (id)initWithClassA: (id)aClass
にしたらエラーにならなかったので閉じ忘れではないと思います
- // ClassA.h
#import <Foundation/Foundation.h>
@interface ClassA : NSObject
- (id) method;
@end
// ClassA.m
#import "ClassA.h"
#import "ClassB.h"
@implementation ClassA
- (id) method
{
return [[[ClassB alloc] initWithClassA : self] autorelease];
}
@end
- // ClassB.h
#import <Foundation/Foundation.h>
@class ClassA;
@interface ClassB : NSObject
{
ClassA *_item;
}
- (id) initWithClassA : (ClassA *) aClass;
@end
// ClassB.m
#import "ClassB.h"
#import "ClassA.h"
@implementation ClassB : NSObject
- (id) initWithClassA : (ClassA *) aClass
{
[super init];
_item = [aClass retain];
return self;
}
@end
- // main.m
#import <Foundation/Foundation.h>
#import "ClassA.h"
#import "ClassB.h"
int main(int argc, char **argv)
{
NSAutoreleasePool*ap = [[NSAutoreleasePool alloc] init];
ClassA*a;
ClassB*b;
a = [[ClassA alloc] init];
b = [a method];
NSLog([b description]);
[ap release];
return 0;
}
/*
こういうのじゃないの?
インデントは全角空白になってる。
Mac OS X 10.3.1
% cc -o test.o -framework Foundation -I . ClassA.m ClassB.m main.m
% ./test.o
2003-11-15 00:36:48.108 test.o[1112] <ClassB: 0x500d70>
*/
- @classを使わずに#importを使っていたのが悪かったみたいです。
どうもありがとうございました。
- すいません、しばらく手を付けられなかったもので…
>>102さんの方法でうまくいきました。相談にのってくださいました皆さまに御礼
申し上げますm(_ _)m
- メタルなウィンドウにNVViewのサブクラスを置き(NSViewWidthSizable)、
- (void)drawRect:(NSRect)rect {
NSDrawWindowBackground(rect);
}
とだけしたのですが、ウィンドウをマウスでリサイズすると、
テクスチャがウィンドウにうまく連動せず、リサイズ前の状態のテクスチャが
タイリングされてしまいます。
これをきちんと連動させるにはどうすればよいのでしょうか?
- どこかにFileBrowserの良いサンプルコードありますかね?
HMDTのサンプルコードを参考にいろいろいじってるんだけど
なかなか思うようにいかなくてね。
- >>148
- (void)viewDidEndLiveResize{
[super viewDidEndLiveResize];
[self display];
}
これでとりあえずリサイズ終わったら描画し直される。
- >>150
ありがとうございます。
色々試して、とりあえず現状はそんな感じ(setNeedDisplay)で
しのいでるのですが、Safariはどうやってるのかなーと思ってるところです。
class-dumpでSafariを見ると、NSWindowのカテゴリに
-(id)scaledBackgroundというメソッドが追加されてて、
Viewはそれを見てるっぽい感じなんですが、
NSWindowでどういう操作をしているのかわからず・・・
- Cocoaでファイルのラベルを取得したいのですが、どうやってやるんでしょうか?
もしかしてFSRef使うんですか?
あとラベルの名前を取得する方法ってありますか?
com.apple.Labels.plistに入っているみたいですが、
(ただし自分で設定した名前のみ)
正規の取り出し方法はあるんでしょうか?
- 質問です。プロジェクトに追加してある画像リソース(tiff)をNSImageとして取り出したいんですが
http://homepage.mac.com/mkino2/cocoaProg/Foundation/NSBundle/NSBundle.html
ここに書いてある方法より簡単な取り出し方っていうのは無いんでしょうか?
プロジェクトに内蔵してる画像を取り出すわりにはずいぶん複雑に思えたもので...
- >>153
[NSImage imageNamed:@"Name"];
- 即レスありがとうございます。
ですよね。ですよね。
- SIGSEGVが起きるかもしれないことがわかっている場合、
signal, setjmp, longjumpを使えば補足して異常終了させない
ようにすることはできたんですが、
「アプリケーションは予期しない理由で終了しました」
ダイアログを抑止することができません。
これを出さないようにする方法ってあるんでしょうか?
NS_DURING, NS_HANDLER, NS_ENDHANDLERを使ってもだめでした。
- signalでキャッチしても、ダイアログだけ出ちゃうっとこと?
- >>157
そうなんです。
ダイアログさえ出なければ、何事もなかったように走り続けられるのですが。
- どうしてそういうことをしたいのか気になる・・・
- QuickTimeに壊れたファイルを描画させると落ちることがあるんで。
- ttp://www.big.or.jp/~crane/cocoa/0100_imageView/interpole/を参考に
ラジオボタンでNSImageInterpolationを変更するプログラムを作ってみたのですが
変更後の画像を見ても補間方法が変わっているようには見えないのです。
ラジオボタンをクリックした時にメソッドが呼ばれて
NSGraphicsContext *gc = [NSGraphicsContext currentContext];
[gc setImageInterpolation: NSImageInterpolationHigh];
とかやってるだけなんですが...NSGraphicsContextの扱い方が間違ってるのでしょうか。
- 再描画しないと反映されないのでは?
- 某スレからの流れで質問なのですが、
画像ビューアでよくある、フルスクリーン表示ってどうやって実装したら良いものでしょうか。
- >163
やることは至って簡単で画面いっぱいのNSWindowに切り替えればいいだけです。
しかし普通のWidnowをでかくしただけじゃうまくいきませんのでそれ用のNSWindowを作ります。
やるべきことは、
1,(メインの)画面と同じ大きさで
2,タイトルバーを含む境界線がすべて無いNSWindowを
3,メニューバーよりもDockよりも前に表示する
です。
1,は簡単
NSRect fullscreenRect = [[NSScreen mainScreen] frame];
これをWindowのFrameにすればいいだけ。
2,NSWindowを作るときのstyleMaskにNSBorderlessWindowMaskを渡してあげる。
3,NSWindowのレベルをNSStatusWindowLevelにしてやると出来ます。
あとは出来たNSWidnowにNSViewを貼り付けるだけです。
- 例えば (動作を確認してません。また、解像度の変更に対応してません。)
-(NSWindow*)fullscreenWidnow {
static NSWidnow* result;
NSRect fullscreenRect = [[NSScreen mainScreen] frame];
if( ! result ) {
result = [[NSWindow alloc] initWithContentRect:fullscreenRect
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO];
[result setLevel:NSStatusWindowLevel];
// たいていは黒バックですよね。
[result setBackgroundColor:[NSColor blackColor]];
}
return result;
}
-(void)fullscreenMode {
....
window = [self fullscreenWidnow];
// このviewはNibで作っておくのが楽だと思います。
// contentViewのsubViewにせず直接contentViewに設定してもかまいません。
[[window contentView] addSubview:view];
....
[widnow makeKeyAndOrderFront:self];
....
}
-(void)normalMode {
....
window = [self fullscreenWindow];
[widow orderOut];
[view removeFromSuperview]; // お片づけ
....
}
- >>164-165
解説付きでありがとうございます!早速やってみます。
- 現在のデフォルトブラウザを知るにはどうすればいいですか?
訳あって、ダブルクリック(-openFile:)ではブラウザで開かれてくれない
ファイルをブラウザに投げる必要があるのです。
よろしくお願いします。
- >>167
Launch ServiceのLSGetApplicationForInfo()で拾えたような気がします。
どっかで見た気がするんですが、どこで見たか忘れてしまいました。
- -(BOOL)openURL:(NSURL *)url
でデフォルトのブラウザで開けないだろうか?
- URLがfile://の時はopenFileと同じ動きになるよ。
- >>168
ありがとうございます。調べてみます。
>>169
やってみたのですけどだめでした。openFile:と同じ結果になってしまって。
- うー・・Carbonですか・・つらいっす。でもがんばります。
- NSUserDefaults *defaults=[[[NSUserDefaults alloc] init] autorelease];
NSDictionary *dictionary1=[[defaults persistentDomainForName:@"com.apple.LaunchServices"] objectForKey:@"LSPrefsBindings"];
NSDictionary *dictionary2=[[dictionary1 objectForKey:@"U:http"] objectAtIndex:0];
NSString *identifier=[dictionary2 objectForKey:@"LSBundleIdentifier"];
NSString *filename=[[NSWorkspace sharedWorkspace] absolutePathForAppBundleWithIdentifier:identifier];
Cocoa なら、これでデフォルトブラウザのパスが取得できる。
plist の仕様が変わったら使えんけど。
- >>173
いけました。ありがとうございます!
それにしても何をしているのか、中身がいまいちわからんのですけど・・。
LaunchServiceともども、追々学習していきます。
- 168ですが、元ネタわかりました。
http://cocoa.mamasam.com/COCOADEV/2002/09/2/45230.php
ここです。
173はおおざっぱに言うと~/Library/Preferences/com.apple.LaunchServicesを
読み込んで、httpに関連づけられているアプリケーションのidentiferを得て、
それをNSWorkspaceで処理してるってことですかね。
って、173さん、勝手に書いてすいません。あげくにもし間違ってたら重ねてすいません。
とりあえず~/Library/Preferences/com.apple.LaunchServicesを実際に開いてみたら
理解が進むんでないでしょうか。
- あ、すいません。
com.apple.LaunchServicesじゃなくてcom.apple.LaunchServices.plistっすね。
- ちょっと訂正させてください。
誤;3,NSWindowのレベルをNSStatusWindowLevelにしてやると出来ます。
正;3,NSWindowのレベルをNSScreenSaverWindowLevelにしてやると出来ます。
こちらの方がよいようです。
また、2点ほど問題がありました。
1点めはcmd+[TAB]、exposeによるアプリの変更に問題を生じる。
これはNSApplicationのdelegateで
- (void)applicationWillResignActive:(NSNotification *)notification
{
if( フルスクリーンモード ) {
ノーマルモードに変更
}
}
で回避可能です。
これをしないとほかのアプリが見えないにも関わらずアクティブになるというきわめて危険な状態になります。
おそらくユーザーはパニック状態になるでしょう。
フルスクリーンを解除しようにもアプリ自体をcmd+Qで終了させようにもイベントはすべて見えないアクティブアプリに送られてしまいますから。
(ただし、Appleはこれに気づいてないようでiPhotoではこの状態になります。)
2点目はexposeです。iTuneのフルスクリーンモードではexposeは無効化されているようです。
少し調べてみたのですが、exposeのイベントはかなり低レベルで処理されているらしくCocoaAPIでは無効かの方法を見つけられませんでした。
動作から考えるとWindowServerがこれをやってるのは確実なんですがドキュメントが見つからない。。。
- CocoaでシーケンサーのCoreに使えるぐらいの
正確なクロックを得るにはどうしたらいいのでしょうか。
NSTimerをちょっとためしてみたけど、どうも他の
アプリと切り替えたりすると揺れたりします。
アイディア等あれば教えてください。
- >>178
Omniのサイトに精度の高いタイマーのソースが
公開されてた気がする。
……と、これかな。
OmniTimer framework for performing low overhead and high accuracy timing.
ttp://www.omnigroup.com/developer/gamedevelopment/
- >>179
ありがとうございます!試してみます。
- >>177
今までNSWindowの勉強をさぼっていたせいでかなり難儀しましたが、
なんとか実装できました。本当にありがとうございました。
- すいません、初心者なのですが
異なるnibファイル間でメッセージのやり取りはどうやって実現するのでしょうか?
凄い基本的な事かも知れませんがどなたか教えて下さい。
- NSNotificationCenter でも使えば?
- >>182
もしかすると、FirstResponderに送ればいいかもよ。
このことは簡単すぎて、見過ごしているか書いてないことが多い。
- >>161 あたりでも少し触れられてるんですが、
NSGraphicContextってそもそも何なんでしょうか?
公式の文書もあるにはあるんですが...
http://developer.apple.com/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_context/index.html
どこかわかりやすい説明があるとこってないでしょうか?
- htmlからtextだけを抜き出したくて
NSAttributedString *aString;
NSURL *url = [NSURL URLWithString:@"http://www.apple.com/"];
NSData *dat;
NSDictionary *dic;
dat = [NSData dataWithContentsOfURL: url];
aString = [[NSAttributedString alloc] initWithHTML:dat documentAttributes:&dic];
[[textOut textStorage] appendAttributedString:aString];
textOutはOutletです
という感じのコードを書いてみたんだけど
htmlのテーブル部分だけがtext読み込みできない・・・
Viewには表示されてるのに、NSLogで見ると抜けてるのです。
(俺があほ? バグ?)
他に何かいい方法ないでしょうか。
- >>183-184
すいません。プロバイダ規制等で返事が遅れました。
ノーティフケーションもレスポンダチェーンも幾らか勉強不足なので
今すぐは使えませんが参考になりました。御助言有り難うございました。
ドキュメント側オブジェクトはメインウインドウのデリゲートとしてるので[[NSApp mainWindow]delegate]で取得出来ましたが、
逆からは結局出来ませんでした。
- >> 186
俺もHTMLタグをとりだしたいのだが、結局方法がわからなかった。
しかたないので、NSScanner をつかって、地味にきりだしている。
- >186
ドキュメント読んでないけど、テーブルとかは
NSAttributedString の 属性側に入ってるのでは?
- >>188
NSScannerか。使ったことないのでやってみます。
俺はrangeOfStringを使ってテーブルタグを検索削除するメソッド書いて
とりあえず成功した。
が、なんか読み込めないSITEとかあるのでwebkitの資料漁ってます。
http://cocoa.karelia.com/Foundation_Categories/NSString/_Flatten__a_string_.m
こんなのも見つけた。
>>189
NSAttributedString の 属性側に入ってるのでは?
リンク先とかはそうなってると思ったけどどうなのかな。
ヒントさんきゅう。
- ファイルを捨てる動作をさせたいのですが、
ゴミ箱のpathってどこにあるんでしょうか?
あと10.2と10.3では違ったりしますか?
- ~/.Trash <ゴミ箱
- >>191
前にdentomさんとこの板に書かれていたrm安全版という記事にも書かれていたのだけど、
単にmvで、~/.Trashに移動するだけだと同名ファイルが既にあった場合消されちゃうので、
名前も変えてってスクリプトを作ってましたね。
- で、そのスクリプトが以下の通り。
#!/bin/csh -f
if ($#argv > 0) then
set WORKFILE = /tmp/jp_dentom_tra_work
echo 'tell application "Finder"' > $WORKFILE
foreach ARGFILE ($*)
echo -n 'delete POSIX file "' >> $WORKFILE
echo -n $ARGFILE >> $WORKFILE
echo '" as alias' >> $WORKFILE
end
echo 'end tell' >> $WORKFILE
osascript $WORKFILE > /dev/null &
endif
というやつ。適当な名前で、たとえばtraとでもして
tra *.txt
とターミナルで入力すれば、*.txtを全部、ゴミ箱にうつします。
osascriptは実行時間が遅いのでバックグランドで動かすようにしてます。
- ↑掲示板のコピペ仕様としたら改行大杉といわれてしまった(w
tell application "Finder"
delete POSIX file "file-name" as alias
end tell
この3行がキモ。
- ~/.Trash って別パーティションのファイルでも大丈夫なの?
- NSWorkspaceRecycleOperation
- ~/.Trashの決めうちはまずいよ。
複数パーティションに分けている場合とか。
CarbonだったらFindFolderあたりで探したはず。
- Cocoaだったら195のスクリプトをNSAppleScriptと組み合わせるといいかも。
- >>192
有り難うございます。
以前どこかで知った筈でしたがど忘れしていました。
>>193~
ええと、Cocoa専門のプログラム初心者なので
スクリプトもターミナルもCocoaでスクリプトを使う方法もあまり判らないですが、
確かに同名ファイルの場合等、>>196-198さんの事態を考えるとスクリプトでFinderに依頼した方が確実かとも思いますので
>>199さんの方針で書店や図書館等で調べてこようかと思います。
有難うございました。
ちなみに単純にファイル移動のメソッドでゴミ箱に送ろうとしたら出来ませんでした。
単に何か間違えてるのか、そういう仕様なのでしょうか。
- >>200
>>197を無視しているのはなんでだ?
- 197の説明不足じゃないかな。無視したのは。
以下、NSWorkspaceを使ってゴミ箱に捨てるサンプル
// /Users/Shared/_removeにあるtemp.c、temp.txtをゴミ箱に捨てる例
NSWorkspace *aWS = [NSWorkspace sharedWorkspace];
NSString *aDir = @"/Users/Shared/_remove";
NSArray *aFile = [NSArray arrayWithObjects:@"temp.c",@"temp.txt",nil];
int aTag;
if([aWS performFileOperation:NSWorkspaceRecycleOperation source:aDir destination:aDir files:aFile tag:&aTag]){
NSLog(@"OK aTag=%d",aTag);
}else{
NSLog(@"NG aTag=%d",aTag);
}
- おっと、このサンプルはどっかのMLか掲示板で親切に教えてもらったもので
わっちの発案ではない。教えてくれた人、ありがとう。
- >>202-203
おかげで何とか実装出来ました。
移動の際、ドック上のゴミ箱アイコンのアクション
(空アイコンからの更新、入った音の発生)が起こらないのが寂しいですが、これで良しとします。
助かりました、有り難うございます。
>>201無視した訳では無かったのですが、
「>>197 NSWork~がどの様なものか判らないのですが、ゴミ箱処理に関係したものでしたら出来ればもう少し説明をお願いします」
という様な事を書いたのですが編集中に一度消したまま送信してしまいました。>>197さん、すみませんでした。
- ObjectAllocのバーで青色と黄色の違いは何でしょうか?
もう1つ、ObjectAllocで Call Stacksがシンボルで表示されるときと
アドレスのときの違いはわかりますか?
- >>
メニュー
「ObjectAlloc」>「About ObjectAlloc」
Performance 関連の文書にも詳細が載ってたはず。
file:///Developer/Documentation/Performance/Performance.html
- >>204
AppleEvent(Carbon) で Finder におねがいするのが一番確実。
もっとも、いまは Cocoa だけで手一杯だろうけど。
- 自分でファイル移動するとコメント消えちゃうしねぇ。
- >>206
どうも。ここは気付かなかったなあ
>About
に色はありました。
ドキュメントファイルがなかった。
こっちはOSX10.2.8だから?
シンボルの有無はなんなんだろうか。。
- >>207
確かに手一杯ですし、判りませんが頭に入れて置きます。
助言どうもです。
- あの、自作ウインドウにマトリクスを貼付けたスクロールビューを張るだけの話なのですが、
どなたかやり方を教授して貰えませんか?
途中、実装出来たのですが、
表示タイミング等の都合からコードの場所をずらしたり等していたら
スクロールビューの内容が表示されなくなり、夜中から苦戦しています。
勿論、マトリクス等は先に生成してますし、
マトリクスの内容も直接ウインドウに張ると表示されるので出来てますし、
構文エラーもないのですが、
幾ら見直してもおかしい所が見つからず、混乱しています。
下の様な感じなのですが、厳密に張る順番の様な物が有りましたっけ?
PBが破損したのでしょうか?
//マトリクス、ウィンドウ生成後(スクロールも含め全てインスタンス宣言済み)
myScroll = [[[NSScrollView alloc]init]autorelease];
[myScroll setHasVerticalScroller:YES];
[myScroll setDrawsBackground:YES];
[myScroll setDocumentView:myMatrix];
[myWindow setContentView:myScroll];
//[scrollV setVerticalScroller:YES];
- >>211
NSViewのサブクラスの指定イニシャライザはinitじゃなくて
initWithFrame:だったような気が。
- >211
IBでスクロールビュー付けちゃダメなの?
- WebView を使って簡単なブラウザを作ろうとしてるのだけど、
-[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (WebView)
ってエラーがどうしてもでてしまってコンパイルできない。テキストフィールドを1つだけバインディングしてるだけだけれど。
何が原因なんだろ?
当方 Xcode 1.0.1、Interface Builder 2.4(v349) です。
- 間違えた。コンパイルはできるけれど、実行するとエラーがでるんだ。
- >>212
使ってみましたが駄目でした。
そもそも途中、initで実装出来、順番は変えてもコード自体は殆ど弄ってないので余計原因が判りません。
>>213
メインウインドウのサブウインドウなので自作にしたのですが、
何かIBの使い方を誤解してるでしょうか?
- フォルダ内一覧を配列に取得した場合、
配列から「Icon(ニューライン文字付き?)」や
「*.txt]等の一部一致した文字列を消す方法を教えて下さい。
後者の*はワイルドカードのつもりですがcocoaでは使えない様ですし
配列の一つ一つをhasSuffixで参照しても出来ませんでした。
もしくはフォルダ名だけを取得する方法が有れば教えてください。宜しくお願いします。
- すいません!他の関連処理部分の更新用メソッドの未実装に気付き直したら出来ました!
お騒がせしました。本当にすみませんでした。
- 初めまして。
XCodeはどこにあるのでしょうか?
買ったままの状態ではインストールされてないのでしょうか?
- 出来ました。
マトリクスをスクロールビューに貼付ける前に
中身のセル等に自動リサイズする様セットしたのが原因だった様です。
と、一応同じ所でつまずく人の為に書いておきます。
同じくお騒がせしました。
- >>219
Pantherプリインストールマシンなら、/Applicationsフォルダの中にディスクイメージがあるらしい。
あるいはADCオンライン会員になってDownloadする。
- ∧∧
(゚Д゚ ) <おいこそが222ゲトー
/◎ ̄旦/ヽ;;;⌒`)
/___/ ※/)≡=-;;;⌒`)⌒`)
/ ※ ※ ※ ※ // ≡≡≡≡= -;;;⌒`)⌒`)
(ー―――――_,ノ ≡=⌒`);;;⌒`)≡=-⌒`)
 ̄ ̄ ̄ ̄ ̄ ̄ ズザー―――
- よくある、テーブルビュー等の項目をダブルクリックするとウインドウが開き、
開いたまま更にダブルクリックするとウインドウが手前に来るというのを実現させたいのですが、
ウインドウが複数に及ぶ場合、ノーティフィケーションやデリゲート等で実現可能なのでしょうか?
メニューのウインドウ項目を取得する様な方法が有れば教えてください。
お願いします。
- >メニューのウインドウ項目
って、ウインドウメニューの事が言いたいのか?
NSTableVIewのdoubleActionから
NSWindowのmakeKeyAndOrderFrontを
呼び出せばいいんでないの。
- >>223
document-based application
- ええと何と言ったらいいか。とりあえず今作ってるものの構造を書くと、
ダブルクリックでウインドウをコントロールするインスタンスを作成して、それがウインドウを生成し、
同時に配列にウインドウ名を追加する事で
そのウインドウ名が配列内に無い場合のみウインドウが開く様にして、
同じウインドウを開かない様にしてるのですが(ウインドウを閉じた時に配列からウインドウ名を削除する)
ウインドウが多種類あるのでmakeKeyAndOrderFrontを送る名を特定出来ない、という事です。
- 配列にウインドウ名を書き込んで管理している?
そりゃ管理のしかたが悪い。
単純にウインドウなりコントローラなりへの参照そのものを
配列に突っ込んどきゃいいのでは。
- 確かにそうでした、
すいません、色々勘違いしていました。
(というか結構疲れてるみたいです…)
- NSAttributedStringをhtmlに変換する方法って何か無いですか?
htmlからNSAttributedStringを作れるんだから反対もできるだろう、というのは安易でしょうか?
- 例えば Software Update のアップデート画面などでは
NSTableView の Cell の中に Progress Indicator が
組み込まれていたりするのですが、
そのような NSTableView を作るにはどうすれば良いのでしょうか。
NSCell のサブクラスの中には Progress Indicator は無いようですので、
普通の方法では実現できそうにないような気もしますが。
- >>230
Software Updateの
>Cell の中に Progress Indicator
UI Element Inspectorで見たところ、イメージCELLっぽいから
自分で書いているようだ。
- appleのUIに似せようとしてもCocoaには相当する機能がなくって
それぞれのアプリで頑張らなきゃならんってのはどうにかなんないもんかね。
- >232
Appleがユーザーインターフェースガイドラインを無視して暴走している方が問題だと思うが。
自前でがんばってもOSのバージョンアップでおかしくなる可能性を考えると、
あんまりがんばる気になれないなあ、俺は。
- ファイル(orフォルダ)にアイコンをセットする方法を教えて下さい。
- >234
AppKit/NSFileWrapper.h
- >>234
ttp://homepage.mac.com/troy_stephens/software/objects/IconFamily/
- 有り難うございます。
(しかしNSFileWrapperが何なのか調べてる所です)
- ご存知の方がいらっしゃったら教えてください
Expose中とそうでない時を判定するにはどうしたらいいでしょうか。
ここで、Expose中とはF9~F11でウインドウが縮小したり、外に移動したりしている時
のことです。
- プチ疑問。
NSLogを全部とっぱらったら0.1秒位処理が早くなったりするん?
- >>239
NSLogの数による
- 膨大な数を格納した配列にdescriptionさせたりとか。
- Cocoaプログラムに初挑戦しております。
重たい処理(処理A)を行うとカーソルが虹色のくるくる回るやつになり、
処理が終わるまでウインドウのボタンが一切きかなくなります。
(処理A中にはキャンセルフラグが1になると中断する仕掛けが組み込まれてますが、キャンセルフラグを1にするボタンを押せないので結局キャンセルできません。)
WindowsでいうところのApplication->ProcessMessage()のような関数、
すなわち、一旦処理をOS側に戻す関数などcocoa上にありましたら、教えていただきたくお願いします。
- RunLoopかな、これだと遅くなるから、
キャンセルフラグくらいならThreadにしたほうが良いぞ
- >>243
情報ありがとうございます。
スレッドのサンプルを見ながら、処理Aを32分割してみました。
しかし、結局32個のスレッドが終わるのを待つループで
虹色カーソルが出て、なにも受け付けくれず、事態は全く改善しません
でした。よく考えてみると当然ですね。
スレッドが終わるのを待つループの中でrunloopを使えばよさそうだ!
というのは解ったのですが、いまいちrunloopの使い方がよくわかりません。
runloopのサンプルプログラムの情報などありました、
教えていただきたくおねがいします。
- 便乗でoneway修飾子の使い方を教えて下さい。
単にvoidにくっ付けても効果がない様ですが。
- >>231
アク禁食らってて遅くなりましたが、ありがとうございました。
自分で描くのは面倒なので断念したいと思います。
>>244
フラグを参照して適宜終了するようなスレッドを
1つだけ走らせれば十分なような気もしますが。
32個のスレッドというのは何か設計に問題が無いですか?
ついでに質問というか疑問なのですが、新たにスレッドを走らせる場合に
NSThread の detachNewThreadSelector:toTarget:withObject:
を使わずに
NSApplication の detachDrawingThread:toTarget:withObject:
を使ったとしたら何か問題があるでしょうか。
後者は自動的に NSAutoreleasePool を用意してくれるので便利なのですが、
どうも名前からすると何かを描画する時に使うことを予定しているようです。
- + (void)detachDrawingThread:(SEL)selector toTarget:(id)target withObject:(id)argument
Creates and executes a new thread, automatically creating an NSAutoreleasePool for the thread.
This method is a convenience wrapper for NSThread’s detachNewThreadSelector:toTarget:withObject:.
- >244
> スレッドが終わるのを待つループ
これが無ければうまくいくでしょうね。
さらに>246さんの
> フラグを参照して適宜終了するようなスレッドを
> 1つだけ走らせれば十分なような気もしますが。
を適用。
あと、NSLockも調べる。
- >245
oneway, in, out, inout, byref, bycopy は
プロクシを使った分散オブジェクトのオブジェクト間通信時のみにしか適応されないようです。
http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/4objc_runtime_overview/chapter_4_section_5.html
英語の文献しかないみたいです。。。
- AppleのThreadサンプルは起動までの単純な実装だから、実用には
かなり試行錯誤しないと理解できないと思う。
あれで分かりづらいのは、DistantObjectとThreadをいっしょに
書いているところだよ。サンプルも何度か書き直されているから
その人も理解していないはず。
通常のアプリでは、2つのThreadの同期で充分だけど、
少し複雑なThread間でメッセージ通信を行いたい時は、DO(Distributed Objects)
にして、互いにRunLoopが必要なんだ。
そのとき、onewayは意味がある。
Win32でいう所のSendMessageとPostMessageだな。
- MAC OSⅩ(v10.2)
の音量をいじくるプログラム作りたいんですけど
ボリュームコントロールがよくわかりません
教えてください
言語Objective-Cです
- VBでいうところのdoevents関数みたいなのってcocoaにはないのかな?
それがあれば>>242さんの問題も解決すると思うんだけど
あとNSThreadは広分社のobjective-Cって本に詳しい解説がのってた気がします。
- >>250
>通常のアプリでは、2つのThreadの同期で充分だけど、
NSThreadでこういうごくふつうのマルチスレッディングってできるんだっけ?
- オレはスレッド間の通信はNSLock系のクラスで排他制御をかけたNSMutableArrayを
使ったけど。DOは高度すぎて、よくわからんかった。
-
手抜きするなら、同期処理がややこい Thread を使わず、NSTimer 使っ
て1秒なり0.1秒なりの単位で繰り返し特定のメソッドを呼び出させる。
もちろん、特定のメソッドではループするのじゃなく適当な単位で処理
できたら即座に return すると。
全て終わったら Timerそのものを invalidate する。
Thread を立てないから Timer で呼び出しているメソッドの実行中は
マウスやキー操作には反応しないけど、「適当な単位」を適宜短くして
おけば気がつかないよ。
- >>253
>NSThreadでこういうごくふつうのマルチスレッディングってできるんだっけ?
こんな質問が出るとは>250さんの言う通りみたいね。
別にNSConnection を使わなくてもいいいんです。
NSRunLoopも必要なし。
+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument;
で普通のメソッド渡してやればそのメソッドは別スレッドで動きます。
NSAutoreleasePoolのインスタンスがいないのでメソッドのはじめで作って最後で捨ててやればいいだけです。
NSRunLoopが走ってないので適宜NSAutoreleasePool を解放してやらないと、
メソッドが終わるまでゴミがたまったままになりますが。
自分でループを回してるんだったら、ループのはじめでNSAutoreleasePoolを確保して、
ループの最後で解放するのが常套手段ですね。
- だれかNSThread使ったサンプル書いてやれよ
と人に押し付けてみるテスト
- >>256
そのへんどうだったかなぁ?
スレッドをdetachするのはいいとして、detachしたスレッドを示すIDが
得られないから、スレッド間通信ができないじゃん、と思った記憶が
あるが。
- ttp://www.geocities.co.jp/SiliconValley-Bay/5171/nsthreadsample.zip
難しく考えなくても、こんな感じでOKなのでは。
- >>256
NSApplicationの
+ (void)detachDrawingThread:(SEL)selector toTarget:(id)target withObject:(id)argument
を使うとNSAutoreleasePoolの確保と解放をこいつが勝手にやってくれるから便利よ。
- >>258
どういう種類のスレッド間通信ですか?
- .DS_Storeを生成&設定する手段って用意されてるんでしょうか?
- >>262
何やりたいのかよくわからんが、FinderにAppleEvent送るしかないんじゃない?
- テーブルから文字列をドラッグ&ドロップでテキストエディタなどに
移すことができるようにしようと思っています。
そこで、試しに NSTableView の delegate に
-(BOOL)tableView:(NSTableView *)tv writeRows:(NSArray*)rows toPasteboard:(NSPasteboard*)pboard{
[pboard declareTypes:[NSArray arrayWithObjects:NSStringPboardType,nil] owner:nil];
[pboard setString:@"test" forType:NSStringPboardType];
return YES;
}
というメソッドを書いたのですが、これでは上手くドラッグ&ドロップできません。
NSLog で調べたところ、pboard への文字列の格納は成功しているようですが、
どのようにしたらテキストエディタなどに文字列を受け取らせることができるのでしょうか。
- http://developer.apple.com/documentation/Cocoa/Conceptual/DragandDrop/Tasks/faq.html#//apple_ref/doc/uid/20002248/BBCGAEBJ
NSTableViewのサブクラスを作って
draggingSourceOperationMaskForLocalをオーバーライドして
適当な値を返すようにする必要があるらしい。
- >>265
ありがとうございます。
直ちに実装して解決しました。
他の方のためにも "draggingSourceOperationMaskForLocal" で検索して
参考にしたサイトを貼っておきます。
ttp://wwwa.dcns.ne.jp/~nito/OSPT/DragAndDrop.html
- NSTextView等で日本語文字列をダブルクリックしたときにかなり良い精度で文節を選択できてるんですが、
これってどこかにそういうAPIがあるんでしょうか?
今10.3しか環境が無いのですが、こいつにはLAServerにLAJapaneseFastTokenizerってLA環境があるんです。
しかしどこを探してもそれに関する記述がありません。
もしかしてこれが目的の物でかつ隠しAPIでアクセスするようなものなんでしょうか?
- >>267
ドキュメントちょっとみた感じだと、NSAttributedStringのdoubleClickAtIndex:→
nextWordFromIndex:forward:がその機能っぽいね。
- >>267
UnicodeUtilitiesのUCFindTextBreak()です。
Cocoaの中身は大部分Carbonであることをお忘れなく。
- モニタの輝度のコントロールはどのAPIから行うのでしょうか?
- >268-269
ありがとうございます。
双方とも期待通りの動作をいたしました。
Wordにだまされたって感じですね。文節なのに。。。
ダブルクリック時の云々と書いてるので確かにこれらのAPIで取得できるのが正しいとは思うのですが。
> Cocoaの中身は大部分Carbonであることをお忘れなく。
全然忘れてません。
とにかくLAServiceしか目に入ってませんでした。。。
もう年かな。。。
- 質問です。NSTableViewのrowがダブルクリックされたらある処理を
させたいのですが、そのためのdelegate methodは存在するのでしょうか。
リファレンスを見たのですがどうもそれらしいメソッドはみあたりません。
delegate method以外の方法があれば教えていただけないでしょうか。
- …ってすいません、ちょっと前で思いっきりガイシュツでした。
お騒がせしました。
- >>272
setDoubleAction:@selector
- ProjectBuilderのソースの索引で Cocoaのクラス(NS*が全部)が、突然に作成
されなくなるときがあるんだけど、どうすればいい?
クリーンしてもダメなんだよ。
OSX 10.2.8, PB v2.1
- プロジェクト名にスペースがあると(例:Currency Converter)
ビルドできないみたいなんですが
これって普通ですか?
- >>276
ProjectBuilder ではできなかったような気もする。
XCode ならできた。
- 複数のサウンドファイルを同時に再生する方法はあるでしょうか。
NSSoundだと独立したスレッドで走らせても他のサウンドが再生中のときは
何もしてくれないようなので……
- プログラミングを始めようと思っていて、C言語かJavaらへんから学びたいのですが。
あまりMacの書籍がないので、for Windowsの書籍でも構わないのでしょうか?
- すべての言語に対して普遍的なことではないですが、Cでは書籍がWin向けのものでも学べます。
コンパイラの扱い方などは参考になりませんが。
そして基本的な言語仕様を学んだ上で、Macでの考え方を身につけてくださいね。
がんがれ!
- >>279
Windows用でもなんでもかまわないと思うけど、要注意なのはGUIを操作する事にばかり注目する
タイプの本だと大半がゴミになると思う。
gccの本とかがいいかもね、OSXでTerminal使ってとかなら。
GUI風味考えるとJavaってのもいいんかね?Java使ってないんでわからん(w
- >>280,281
本当にありがとうございました。頑張ってみます。
ついでに教えてください。
Windows用Mac用関係なくおすすめの書籍の名前を教えていただけませんか?
できればMac用が良いのですが・・・。
- 漏れも最近始めますた。
Cocoa+Objective-CでOO勉強しつつ自己満足なシューティング作りたいなとか
思って、この連休にいろいろサイト漁りしてました。
「Cocoaはやっぱり」にあるCocoaXevi弄ってるんですけどさっぱりですね。
自機追加してキー入力受けて動かすところまでやりたかったんだけど
挫折しちまったい。
FlyObjectコピって(継承は混乱するのでとりあえずまんまコピ)
MyObjectクラスっての作って
XeviViewの初期化メソッドの部分でMyObject初期化して、
drawRectメソッドに自機表示の処理書いて、
……keyDownメソッドからどうやって自機の座標にアクセスしたらいいんでしょう。
別メソッドでallocしたオブジェクトだし……。ここでallocしたら初期化されてなんのこっちゃわからんし。頭が豆腐状態です。
あっという間にNSLogの嵐ですがな。ええん助けて。
ベーマガ世代の趣味グラマなんで見当違いの事言ってる気がしますが
なんか教えてください。具体的な説明頂けなくても抽象的な表現でも構いません。
- >>282
MacOS Xプログラミング入門 Objective-C 萩原剛志氏著 広文社刊
が、BASIC育ちな漏れにもなかなか解りやすいです。
つっても半年で283で投稿した程度の理解度ですが、俺の頭の悪さ差し引けば
結構良書かも。すんなり入れます。
- 質問です。
1) A4の紙の指定の場所(例えば、左から3cm, 上から 4cm)に
文字を印刷するには、どうしたら良いのですか?
ViewのRectの単位が分からないんです。
2) 何百ページにもわたる文章を印刷する場合、やっぱり
それだけ分の巨大なViewを作成しないといけない?
3) 例えば、カード型データベースを印刷するとして、一人分の
データが1ページに収まるか、2ページ以上になるかは、描いて
みないと分からない場合の処理は?
4) 上の話にも関係するのですが、ドラフト印刷というか、
(何ページ目とか考えずに)1ページずつ、どんどん印刷
するような処理をしたいのですが、可能?
- あー、すみません自己解決でした。
単にMyObjectをXeviViewに持たせればええやん何電波書いてんだ俺
interfaceにMyObject入れて初期化して動きました。
お騒がせスマソ
- >>283
本当にありがとうございます。参考にさせていただきます。
- >>282
Objective CとCocoaフレームワークということだとやはりヒレガス本とかって事になるんだろう
けど、この辺の本の場合前提としてCの知識を要求される事があるので、普通にC言語入門とか
書いてある本をとりあえず1冊買ってきてじっくり読みながら試すというのをやって置くといいん
じゃ無いかな?
IDEの説明とかそういうのが書いてあるやつじゃなくて、できるだけコマンドラインの操作で
済むような(パッと見つまらない感じ?)の本を選べば環境に関わり無く読めると思うのだけど、
途中で日本語の文字列を使うような本は処理系依存の罠があるので、教科書通りに書いたんですが
動きません!とかって質問を2chのスレだのMLだのにポストして過去ログ読め!って怒られる(w
とりあえず素のCの文法を解説してるのを立ち読みして、最後までついてけそうって思える本を
1冊。頑張って最後まで読む(もちろん練習問題とかにでてくる問題を自力でくめるようになるま
で頑張ってみるって意味ね。ただだらだら読むだけじゃだめだろな)。
で、文法のあらましが判ったところでオープンソースのソースをいくつか落としてきてそいつの
ソースをじっくりどういう事をやってんのか理解できるまで読む。で、同じような機能を別の書き方
で実現できるか挑戦してみたり、いろいろ理解を深める方法はあるので、試す。
で、その位行くとObjectiveCの追加部分をちらっと見て、Cocoaのクラスに順に馴染んで行く
感じでやっつけるだけでもだいぶ簡単じゃんか!って思えるようになるとおもう。
とりあえず頑張れ。
- Cocoa+Objective Cでゲーム作ろうにも参考になる資料が少ないですなあ。
キー入力判定が巧く逝かない感じでつ。引っかかるというか。
サンプルの豊富さからC+SDLに逃げかけてたり
- >289
NSInputServer,NSInputManagerあたりが使えないかな?
- を、使えそうですね。
帰ったら早速試してみます。thx
- うう。放置されてる。
printInfo見たら、size in pointと書いてあった。
でも、72point=1in.か、72.27point=1in.か?
そこまでは書いてないなぁ。
- ProjectBuilder v2.1 (10.2.8)でブレイクポイントで止まった後に
GUI上でプログラムカウンター移動できないんだけど、なんかいい方法ない?
赤いバーをドラッグしても、表示は移動されても実際には移動されない。
(gdb) set $pc=XXXでアドレス設定できるけど、行との関連がわからない。
- あうー、頭こんがらがっちゃ。
283で「Cocoaはやっぱり」にあるCocoaXevi弄くってた野郎ですが、
なんか何がわかんないのかもわかんなくなってきたのでうpって見ました。
http://nonchang.net/denshi_dai/cocoa_test/CocoaTest.zip
環境はPanther(アップデート最新)+XCode1.1です。
カーソルキーの入力受けて自機を移動しようとして座標をNSLogってるんですが
予期しない動作に。。誰か助けてください。
もし良かったら封書で六花亭のバターサンド送りつけますんで。
参考元のファイルは以下の下の方の奴です。
ttp://www.big.or.jp/~crane/cocoa/
- >>294
変数myがnil(空)になってますよ。
というか、せっかくXcodeにはデバッガが付いてるのですから活用しましょう。
そうすればこのバグも簡単に見つかっていたはずですよ。
- レスどうもです。明日早いので仕事明けたら挑戦します。
デバッガ使っても見方が良く解らなかったですが、myが一覧に
ないなあとか思ってた所でした。ドキュメント読んでおくます
うーむ。なんで空なんだろう。
- 昼休み中に会社のマシンにXcode Toolsこっそりインスコ。。
デバッガ便利ですねぇ。活用せんと間抜けですなこれは。
でもやっぱり俺、オブジェクトの挙動を判ってないみたい。
以前Java齧ってたので、
ttp://kwatch.at.infoseek.co.jp/macosx/objc.html
に助けられつつ基礎から仕切り直してます。
ああ、難しい。けどなんか 楽 し い
- >>294
チャレンジ3分デバッキング
1. 暫定で myに代入してみるテスト
my = [ [ MyObject alloc ] init ];//自機初期化。
中央に自機と背景スクロールは表示されるようになった。
2.背景表示をコメントアウトしてみると、
- (void) drawRect : (NSRect) rect {
// [ imgGround dissolveToPoint : NSMakePoint( 0, groundOffset ) fraction : 1.0 ];
自機が2機表示されているようだ
3.っていうかLogに「initialized.」が2回表示されているので、
初期処理からして2重起動されてる様子なんですが。
3分終了。
- >> 298
nibファイルをIBでリストで見るか、作り直すとわかるかも(GameViewが二つある)
- 直ったぁぁぁぁぁっ!<会社で試すな
my = [ [ MyObject alloc ] init ];
でいいのか……。
MyObject *my=[ [ MyObject alloc ] init ];
とかやって混乱してました。
さらにIB慣れてないせいでGameViewが二つあるお馬鹿な状態を
放置してたみたいです。
二日悩み通した部分を3分でデバがれるとは。。みんなありがとう。
追伸:300げと
- >>290
違うみたい。インプットメソッド関連の模様。
どうしたもんかな。
カーソルキーのコードがマスクで取れなきゃ斜め入力もできない。
NSEventMaskFromTypeで調べてみるとカーソル
NS[Left,Right,Up,Down]ArrowFunctionKeyが
1,2,4,8返してるから、これらの入力を判定できればいいんだけど。
keyEventWithType周り調査中……。
- おお、カーソル同時押し+滑らか移動の力技での処理方法発見。
ttp://www.stripe-net.jp/cocoa-jserv/servlet/main.bbs?page=6
とりあえず解決。タイマー使って切り刻んでるのね。先人達に感謝。
でも、もっとスマートな方法用意ないのかなぁと調査続行してみたり。
- >>302
CarbonだけどGetKeys()で全部まとめて取得する方法もある。
- いろいろソース公開されてるプログラム漁ってたんですが、、
丁度carbonでgetKeys()ってのばっかりヒットしてました。
carbonのAPIってcocoaベースのプログラムから引っ張れるのかとか
さっぱりわかってないんですが、そんな方面を調べてます。
……もう日付変わっちゃったのか。
続きは明日にします。おやすみなさいー。
- >>304
NSResponderのkeyUp:を使えるのでは。
keyDown:が発生したらそのキーを押されたものとして登録する。
keyUp:が発生したらそのキーが離されたとして登録から削除。
ゲームループではこのキーが登録されているかどうかで入力の判定を行う。
こんな感じていけると思った。
ちなみにOSX版のQuakeもイベントハンドリングにCocoa使ってたと記憶している。
http://www.fruitz-of-dojo.de/php/download.php4?dlnr=2
- なんか寝ようと思った矢先にそれなりに動くようになりました。>>305さんthx!
http://nonchang.net/denshi_dai/cocoa_test/CocoaTest20040114.zip
まだちょっと引っかかりますね。まぁ初cocoaって事で勘弁してあげます。
あとは弾とか出るようにしてキャラ絵差し替えてオブジェクトの抽象化みたいな事
やろうとして挫折しながらcocoaはやっぱりの管理人にお礼述べつつゲームに
なるように作りこんでみたいと思います。
ほんとcocoaベースのゲームのソースって無いですね。
誰かの参考になるように今後もうp続けて行きたいと思うます。
おやますなさい。
- 指定するファイル名間違ったのでうpしたファイル名慌てて直したなんて
そんな事違うですよ?
- モテモテ王国みたいな日本語だな
- デリゲートって難しい……。
BGMをループさせたいんですが、そういうAPIが見つからなかったんで
「sound:didFinishPlaying:をサウンドオブジェクトからデリゲートされている
クラスに書」きたいのですが(引用:ttp://www.oomori.com/cocoafw/ApplicationKit/NSSound/sound.html)
慌てて萩原本の該当項目読んでもさっぱりわからんです。
定期的に
if([soundBGM isPlaying]==NO)
{
[soundBGM play];
}
やったら案の定、終わってから再生までが微妙に開くし……。
(一応サウンドファイル自体はしっかりループするように設定してます。
以前アプレットで綺麗にループできてた素材なので。)
BGMループさせるのってどうしたらいいでしょうか。。
デリゲート使うのが正解な気がするので勉強中ですが、見当違いな事
やってるんじゃないかという恐れもあるので。
- あ、あれ?Xcode1.1ってObjective C++じゃないの?
for(int i=0;i<100;i++){}
がエラーになるんですよ。
{
int i;
for(i=0;i<100;i++){}
}
は通るのに。
C++だけど変数宣言はC同様ブロックの先頭のみしかダメなのかな。
- Objective-CであってObjective-C++ではないと思う。
- >>309
このスレか前スレに全く同じ話が出ている。
- >>312
すんませんっ、過去ログ以前に斜め読みしただけですっかり抜けてました。
>>85-86ですね。失礼しました。
でもデリゲートは必要な訳ですね。理解しとかんと……。明日チャレンジしてみます。
たいした変わってない今日の分(てかcocoaはやっぱりのサンプル参照しながら
元通り敵出すようにしただけ+BGMの似非ループ..;)
http://nonchang.net/denshi_dai/cocoa_test/CocoaTest20040115.zip
- >>311
ぐぐると拡張子が.Mまたは.mmの場合にObjective-C++になるみたいですね。
明日拡張子変えて試してみようと思います。
やべ、寝ないと明日も会社遅刻しちまう<ダメ人間
おやすまなさい。
- >>311
OSX 10.0.xまでのProject BuilderにはObjective-C++無かったけど、サポート済み。
>>314
えっと、Xcodeの設定だと
プロジェクト > 情報を見る > GNU C/C++ Compiler > Language > Compile Sources As
が According to File Suffix (ソースファイルの拡張子を見て判断する)
になっているはずなので、固定したいのなら変更することも可能。
- モアII自体には対応してるんだから大丈夫じゃないかな。
リン糞がモアII24M→40Mにアップした事に気づいてないんでしょw
NTT接続をISP経由する場合、申込みとかブリッジしてるだけのはず。
- 誤爆ですスマソ
- 誤爆ついでに>>313をビルドしてみたよ。意外と快適に動ててビックリ。G4-450Dual。
以前どっかで見かけたアメさんのCocoaなシューティングは何だったのかな・・・・。
なんかマウスで動かして操作性悪い上に糞重い奴。
あれ見て、Cocoaでゲームに挑戦するのは難しいという先入観に繋がってた。
俺も何か作ろうかな。Cしか知らんけど。
- >>310,314
コンパイラに-std=c99与えたら多分通ると思うけど。
C99からそういうやつもサポートされてるから。HMDTでも似たような話を見た気がする。
間違ってたらごめん。
- http://nonchang.net/denshi_dai/cocoa_test/CocoaTest20040115.zip
今日やったこと:
・IBでカスタムクラスにアウトレット作る方法探すのに手間取ってみた
・怒られる前に画像リソースを書き起こした。急にヘボくなっちった……。
PNG32そのまま使えるってのはいいですねぇ。
・拡張子を.mmにしてObjective-C++にしてみた
>>311,319 拡張子変えると>>310の前者で通りました。
なんか警告でてるけど……。
・ゲームの状態遷移の管理方法を仮実装。
無茶苦茶頭悪い事してる気がする。
・デザインパターンの本買ってきた。
買ってきただけ。
明日やりたい事:
・デリゲート使ったサウンドループ処理をがんばる
・弾と当たり判定まで行けたらいいなぁ
・設計見直さないとまずいのが良く解るこのぐちゃぐちゃなソースを
どうにかするのは一旦ゲームとして仕上がってからにしようと思ってたり
>>318
以前Windows+HSPでゲーム作ってたんですが、
それよりは処理速い感じがしますけど、けっこう一杯一杯です。
ゲーム用途で高速化しようと思ったらOpenGLしか無いのかな……?
ふわぁ。道は長い。
お休みなさい。
- リンク間違えました。
http://nonchang.net/denshi_dai/cocoa_test/CocoaTest20040116.zip
まぁ、大した進んでないし自戒のためのupに過ぎませんが。
- >>321
最近Cocoa&ObjectiveC勉強し始めたんですが、自分はプログラム覚えるには、まず本を読むより、
他人が書いたソース読むほうが早いと思っているので、大変参考になります。
- >320
ガンガレー!
- >>321
ループするBGMはNSMovieViewをウインドウに貼りつけて、
NSQTMovieLoopingPlaybackモードで再生してやる方が良いかと。
これなら音量調整なんかも簡単ですし。
- >>320
Xcode1.1でそのままコンパイルしてみました。
多分.mmにしたせいで、C++関係の警告が出てると思います。いまいちC++のことは
分かってないけど……"initialization to 'int' from 'float'"とか出てるので型のキャスト関係の
警告が出てると。C++ってその辺きついんだったけ?
IBMからコンパイラが出たねぇ。Objective-Cにも対応してるらしいからこれから出てくる
Cocoaアプリが楽しみ。多分高いんだろうなぁ。
- >320
とりあえず1点だけ。
初期化時以外に initWithArea: を呼んでますがこれはよくないです。
setArea: を作ってやるのが良いでしょう。
initWithArea: の時もself に対して setArea: を呼べばいいだけです。
やっぱりもう一点(w
共通部分は可能な限りスーパークラスに持たせましょう。
-(void)setArea:(NSRect)area {} // 何もしない 必要ならサブクラスがオーバーライド
-(id)initWithArea:(NSRect)area
{
if( (self=[self init]) ) { // super じゃなく self
[self setArea:area];
}
return self;
}
をスーパークラスが実装していたとすると...
って言うのもありです。
>325さんのキャストの警告回避はC++的には
static_cast<int>(val)
ですね。(int)val より安全になりますしね。
ガンガッテ!
- Cocoa+Javaはどうなの?
- >>325
参考になります。とりあえず警告取れました。
C/C++も合わせて勉強中なので実のところ良く解ってないですが。
>>326
参考になります。設計手直ししてみてます。
共通部分統合してソースがまとまっていくのは楽しいですねえ。
実装は泥沼化してますがw、勉強しつつ頑張ります。
>>327
要はcocoaへのアクセス方法が提供されてるJavaです。
XcodeではJavaのインストラクションは自動補完が効かないです。
利点は手馴れたJavaのAPIも一緒に使える点ですかね。
Cocoaでやるより多少遅い、起動に時間がかかるというデメリットが
あるみたいなのですよ。
たまにJavaのブリッジ部分にバグあると言う方を見かけるのが気になったり。
pure JavaのインターフェイスがInterfaceBuilderで作れたら
面白いのになあ。Java1.5の正式版が出てきたら再挑戦してみようかな。
- http://nonchang.net/denshi_dai/cocoa_test/CocoaTest20040117.zip
やったこと
・オブジェクトの設計ちょっと見直し
・敵と自分の弾を出す処理
・当たり判定用の空実装
・訳もわからずながらとりあえずビルド警告対処
今晩以降時間取れれば
・当たり判定を処理してみたい
・動く奴らの処理をオブジェクト指向で纏めたいなあ
・ループ処理に>>324さんの手法を試してみたい
・敵の弾を自機に向かわせたい
>>322
ゲームの参考になるソースが少ないですよね。
他の方の参考になると嬉しいです。まだまだソース汚いですが、
OOならではの設計勉強しつつやるつもりなので気長に見守ってやってくださいw
アルゴリズムの多くが「cocoaはやっぱり」のwebにあったサンプルそのままなんで、
そちらを参考に書き起こしてみるのもありかも。
さて敵の弾を自分に向かわせるには、と。
設計以前に三角関数ってなんだっけという数学レベルにて脳みそ沸騰中です。
- 309のリンク先のコードをちょっとだけ変更
@interface Loop : NSObject {
int doLoop;
}
@end
@implementation Loop
-(void)setLoop: (BOOL) flag {
doLoop = flag;
}
-(void)sound:(NSSound *)sound didFinishPlaying:(BOOL)aBool
{
NSLog(@"didFinishPlaying");
if (aBool && doLoop) {
[sound play];
}
}
@end
これでループはするよ。mp3の20秒ぐらいのファイルではできなかったけど、aiffならできた。(MacOS X 10.3.2+xcode 1.1)
mp3でちょっとだけ次のループ時に途切れる。音量コントロールもできないし。
- stray "\201"ってなんだ……。
日本語で書いたコメントがパースエラー起こしたりして偉い面倒なことに……。
- だんだんゲームらしくなってきたので実行バイナリ単体も晒してみるテスト。
http://nonchang.net/denshi_dai/cocoa_test/CocoaTest20040117-2-app.zip
ソース(というかこれまで通りプロジェクト丸ごと)
http://nonchang.net/denshi_dai/cocoa_test/CocoaTest20040117-2.zip
やった事:
・音増やした。
・当たり判定実装(なんかちょっとズれを感じたり)
・敵倒せるように。また、自分に弾や敵が当たったら音が出るように(死にません)。
BASIC言語でやってる感覚で処理増設しまくったので、
コードが相当汚くなってます。しかも随分重くなってきた悪寒。
今後やりたい事:
スコア表示、レベルアップ、ゲームオーバー、ボスの実装とかいろいろありますが、
その前に、既にいろいろタコなコーディングが積み重なり過ぎてる気もするので
整理+効率化+オブジェクト指向的な設計見直し、に時間使おうかと思います。
あとうまく実装できてない「きれいなサウンドループ」も処理せんと……。
いいかげん萩原本読破してきます。
その他懸案:
・当たり判定がちょっとヘンな気がする。
・そういやキー入力周りもカクついてるまま放置してるなぁ。
・動く奴らの処理を動的結合とやらで纏めたい。。
>>330
スマソ、そもそもデリゲートされてるクラス云々が良く解ってないので
実装できずでした。
- アプされてるプロジェクトで
NSSound を使う方法と NSMovieView を使う方法の両方について
BGM をループさせる実験をしてみたけど、
どちらも微妙に切れ目ができる。
サウンドファイルを QuickTime Player でループ再生する時は切れ目はできないので、
実装上の問題という気はするが。
- >>328,329,331,332
ガンガレ~。C++はちょこっとかじっただけで自分も勉強中の身でございます。
C++に限らず中途半端もんだけど……Cocoaも最近さわってないし。
日本語のドキュメントがもっと増えてくれるとありがたいけど。
- ぬう……。
NSObjectのサブクラスにはNSImageやNSSoundは入れられないのでしょうか。
スプライトクラスっぽいの実装しようとして、charactorオブジェクトにNSImageを
含めたいのですが、Application Kitの持つクラスは無理なのかな。
エラー
"error:statically allocated instance of Objective-C class 'NSImage'"
に従って
static NSImage charactorImage ;とかやったんですがパースエラー。
タスケテー
- あ、ポインタ渡せばいいんだっけか。
失礼、もうちょい調査続行しまつ
- なんとかなりました。
あー、ポインタこんがらがる……。
- ビルドしても見た目は何も変わってません。多分。
http://nonchang.net/denshi_dai/cocoa_test/CocoaTest20040118_2.zip
やった事:リファクタリングみたいなこと(詳細はソース)
コード量減らねぇなぁ。微妙に減ったけどその分コメント増えてもうた。。
- 質問なのですが
10.2から10.3にアプグレし、
10.2上で作成したプロジェクトを10.3上でXcodeで開いて見るだけして(保存は無し)、
PBで再びビルドした所
warning: Precomp'/System/Library/Cocoa.framework/Headers/Cocoa.P'version number is 15 instead of 25,ignoring precomp
の様な他類似のエラーが出、ビルド出来なくなったのですが
これは10.3になってフレームワークの位置や仕様が変わったという事なのでしょうか?
プロジェクトを開くと同じウインドウが2枚開いたりと動作自体もおかしいのですが。
対処法が全く判らず、大凡でも原因を推察出来る方が居ればアドバイスをお願い出来ないでしょうか?
- >>338
そろそろ「Cocoaでシューティングゲーム作るよ!」
みたいな別スレにした方がいいかと。
- >>339
わからんですが、Xcodeは1.1にうpってますか?
開いて見るだけでもビルド関連のファイルを書き換えられると思うので、
buildフォルダを一旦消してからPBで開きなおしてみては。
>>340
そうですね。まぁ新スレ立てて盛り上げる自信も無いので、
製作記録をweb化しといてマ板かム板あたりの様子をみて移動しようと思ってます。
始めはゲ製作技術の「macでゲームを作るスレ」に移動しようかと思ったのですが、
最近はHSPforMacの話題が中心みたいでちょっと様子見中。
どの道オブジェクト設計の勉強し直しに入ってくるのでしばらくupに至らないかも。
- >338
どうしても気になるので。
初期化メソッドで
-(id)init....
{
[super init];
...
return self;
}
てな感じでやってますが、危険極まりないので面倒でも
-(id)init
{
if((self=[super init])){
...
}
return self;
}
とやってください。
[super init] が nil を返した場合が考慮された無い。
この場合関係ないが、[super init] が self 以外のインスタンスを返した場合が考慮されてない。
(initメソッドが self 以外を返す場合、 self が release or autorelease されている可能性があります)
というのが問題があります。
ややこしい話になりますが、インスタンスメソッド内で使える self というものはあくまで
メッセージ送信の送信対象のインスタンスであって [super init] によって上書きされることはありません。
単なる引数と同列のものです。
- おお、なるほど。if文の中で初期化とエラー評価を一緒にやっちゃう訳ですね。
参考になります。thx!
- >343
問題点はそこじゃないです。。。
- >>344
ぎゃあ。
return selfが問題なのかな。。すみません、混乱してます。
NSObjectがinitでself以外 / nilを返す場面というのが
ちょっと解ってないですが、とりあえず鵜呑みでコード直しておきます。
- >>341
1.1にはうpってます。クリーニングも試し済みですが出来ませんでした。
PBとXcodeって互換性が無いものなのでしょうか?
- サブクラスでオーバーライドされてない限り、NSObjectがinitでself以外を返すことはないよ。
- >>346
Foo.pbprojをxcodeで開こうとすると
>警告
“Foo.pbproj”は、古いバージョンの Xcode で保存されています。
このバージョンで開くと、プロジェクトは更新され、
古いバージョンの Xcode では読み込めなくなる場合があります。
このプロジェクトを開きますか?
開かない/開く
のダイアログがでるのだが?
ちなみに、xcodeで新規プロジェクトを作ると、プロジェクトファイルは
Foo.xcodeになる。
- はう……今日挑戦した大掛かりな設計変更、全部うまく行かずボツテイク。
スプライトクラスのメソッド自体に画像書かせるのも、
キャラクタ配列一つに集約してEnumeratorで一発処理させるのも、
配列オブジェクトの要素削除・生成でキャラクタの存在を管理するのも、
ことごとく失敗。ザコですか俺。
なんでクラスメソッド作れないんだよう。
エラー294個ってなんだよう。
無理に進めるとBASICでやってた時より効率悪くなりそうなんで、
萩原本のサンプルソース全部手打ちしてObjCの理解度上げてきます。
その間ソースのうpしばらく休止ます。。
- オイラCをかじったことある程度なんですが
ちょっと大きめのモノを設計するのにも
やはりフローチャート使うんでつか?
それとも今は違う設計図?手法みたいのあるもんなんでそか
オブジェクト指向とかだとクラスとかあって
最初にちゃんとしとかないと大変そう
- >350
UMLを調べると幸せになれる可能性あり。
#ObjCでCASEツール作ろうとして挫折したのは気のせいだと思う。
- >>349
頑張れ、負けるな。
概念の理解っつーオブジェクト指向の最初の壁は突破しとるんだ。
デザインパターン勉強しながら、いったんゲーム離れてツールでも
作ると良いんじゃないかな。
逃げなければ、いつか閃くように書けるようになるさ。
- >>349
>エラー294個
括弧の閉じ忘れとか、余ってるとか、#import <Foundation/Foundation.h>してねーからかも
- 訂正
AppKit.h内でFoundation.hもimportされてる。スマソ。
- >>338をビルドしてみた。
Cocoaの描画って重たいねえ。NSImageじゃなくて、
もっと軽い描画用APIは無いのかな?
NSBitmapImageRepクラスの使い方調べてみるか。
ていうかRepってなんだ?
- >355
常に全画面描画し続けてるからでつ。
キャラクター移動時に元の領域の再描画、移動後のキャラクターの描画だけにすれば相当早くなるとおもいまつ。
初心者の人且つ作り始めなので最適化までは相当時間がかかると重いまつ。
こういう風に情報小出しにしつつマターリと見守ってあげましょう。
> ていうかRepってなんだ?
たぶんレプレゼントのことだと思う。
- まぁ、いきなりOpenGLってわけにもいかんだろうし。
- そんな貴方にGLUT。
Cocoaとは無関係になっちゃうのが諸刃の刃。
だが素人にもお勧め。(以下ry
- OpenGL使って2次元描画するサンプルがめっからなかった訳ですが。
3次元やるにしても、最低限どんだけの数学知識が必要なんだろうと
思うと腰引けまくり。
やっぱDirectX相当の事するにはOpenGL叩くしかないんですよねぇ。うーむ。
……とりあえずのらくらとgoogleでサンプル漁ろw
- ベクトルと行列演算、三角関数は最低限押さえる必要があるかな。
あんまり書きすぎるとスレ違いなのでこの辺で。
- ビルドできる状態に戻せたのでうp。対処できない警告が残ってますが。。
http://nonchang.net/denshi_dai/cocoa_test/CocoaTest20040121.zip
大して変わってないけど、まぁのらくら勉強しつつやってます。
むしろこのままボス実装しちゃって完成した事にして
初めから仕切り直そうかと思ってたりして。
初心者なりに設計が滅茶苦茶になっちまってるように思える物で。。
- >>360
レスthxです。今のうちに三角関数慣れとけば頑張れそうかも。
ム板で参考になりそうなスレ見つけたのでROMっときます。
>>356その他皆様
ヲチthxです(w。今後とも宜しくでつ。
今のとこ描画性能の最適化より設計手法の勉強中心に考えてたりしますが、
実装が安定したり行き詰まった時とかにいろいろ試してみます。
- >>361
メソッドの名前が違うよ~。
-makeObjectsPerformじゃなくて-makeObjectsPerformSelector。
メソッド名調べるときはCocoaBrowserかDocoaBrowserを使うと楽。
- >>361
弾幕がいい感じ。
でもやっぱり軽くして欲しい。
- ageていいスレだと思うんだが、sage進行なのは何か理由が?
- 良スレはsage進行。これ常識。
- そんなもんか。了解。
- 質問です。
Interface Builder でボタンの key equivalent を Return に設定したんですが、
ビルドして、リターンキーを押してみてもうまく機能しません。(クリックすると
ちゃんと機能する)ウィンドウ上でちゃんとデフォルトボタンとして点滅している
ので、key equivalent 自体はちゃんと設定されていると思うのですが、どうして
アクションが呼び出されないのでしょうか? 何か他に設定する必要があるの
でしょうか?
こちらの開発環境は Mac OS X 10.2.8 に Developer Tools 2002 December
です。
- 質問age
- ボタンを貼付けてある Window が Key Window になっていないとか。
- ウィンドウ1つしかないアプリなんで勝手に key window になっている
はずなんですが… それに、問題のボタンの隣には command + delete を
key equivalent として割り当ててあるボタンがあるんですけど、こっちは
うまくいってるんです。あ~、何が問題なのやら…
- firstResponder関係? とか思いつくままカキコ
- >>371
隣のボタンとキー設定を入れ替えたらどうなる?
- >>371
問題のボタンは割り当てた key equivalent に反応しましたが、
今度は Return を割りあてた隣がダメになりました。
どうやら Return だけ、どのボタンに割り当ててもうまくいかないみたいです。
プログラム以外のところに問題があるのでしょうか? キーボード回りとか…
- >>373 です。スマソ
- テスト用にもう一つプロジェクト作ってやってみたらデフォルト
ボタンがちゃんと機能した。Interface Builder 上でのテストでも
Return に反応してちょっとボタンが点滅しているのがわかる。
もしかして、nib ファイルのバージョンかなんかが問題なのか。
ちょっと古いプロジェクトから nib ファイルだけもってきたのが
いけなかったのか?
- 自レス続きスマソ
372 のいうことがずばり正解とですた。
同じウィンドウに TextView があるんですが、こいつのせいでした。
結果を表示させるだけの editable じゃないやつなので、とりあえず
ウィンドウの initialFirstResponder を問題のボタンに設定したら
うまくいきました。
- なるほど。
クイズみたいでおもろい。
- ヤター。
なんかくれ。そうだなぁ、CocoaのAPI完全和訳キボンヌ
- でも、ボタンを first responder にするとアクティブなテキストフィールドを
囲む青い枠でボタンが囲まれちゃってなんか変です。点滅はしとるは青い枠で
囲まれとるわで、注意を引きまくりの存在感ありまくりです。
どっかで keyDown: を横取りしてそっからボタンに performKeyEquivalent:
でも送るように手を加えようと思います。
- >CocoaのAPI完全和訳
俺にもくれ!!
- NSTextFieldにアウトレット繋いだビューからsetIntValueしても値が変わらないぃぃ
警告も出ないー 検討つかねぇぇぇ なんでやー うがー
なんかInterfaceBuilderの習得に一番時間掛かってる悪寒
- >NSTextFieldにアウトレット繋いだビュー
て具体的に何ですか? カスタムビュー?
アウトレットって普通コントローラと接続しませんか?
- あれ、そうなんですか?
えーと。
MVCっての調べなおしてきます。ども。
- あ、でけた。アウトレット名間違えてただけか……。
ゲームのスコアを表示する部品配置して、ゲームのメインループ担当してる
カスタムビューから内容書き換えたかっただけですた。お騒がせしてスミマセン
- 結構ゲームになってきた感じでする。
重いのでとりあえず画面サイズ半分にしました。
アプリケーション
http://nonchang.net/denshi_dai/cocoa_test/CocoaTest20040124-app.zip
プロジェクト+ソース
http://nonchang.net/denshi_dai/cocoa_test/CocoaTest20040124.zip
ゲームの状態遷移の基本的な部分ができました。
時間レベルアップ方式のヒットポイント制です。
操作性の悪さが改善されてないのでレベル10以上いける人は稀だと思います。
だいぶスパゲッティ化してきてます。。
土日はボスキャラ描きつつゆっくり設計見直します。
- あ、忘れてた。pキーでポーズできます。
- 結局、NSTextView にカテゴリをあてて対応しました。
ボタンに key equivalent として Return を設定しても機能しないのは
多分、TextView が keyDown: を受け取った際、単に Return だけが
押されていた場合は、テキストの編集に関するものと受け取ってその
イベントをそこでトラップしてしまうため。そこで、下のカテゴリで
keyDown; を単に次のレスポンダへパスするようにしたところ、問題の
ボタンも正常に key equivalent に反応するようになりました。
@interface NSTextView (PassKeyDown)
- (void)keyDown:(NSEvent *)theEvent;
@end
@implementation NSTextView (PassKeyDown)
- (void)keyDown:(NSEvent *)theEvent
{
// 次のレスポンダへイベントをパス
[[self nextResponder] keyDown:theEvent];
}
@end
こういう場合、サブクラスにするべきなんでしょうけど、
そこはめんどくさかったということでひとつ……
- ほっとくと実メモリが増えて行くぅぅ……。
ObjectAllocツールの見方を調査中
- >>389
それはひょっとして自前のループの中でがんがん一時オブジェクト(生成時に
autorelease されてるやつ)を生成してるんじゃ……
アプリのメインイベントループの終端までいかないと AppKit が用意している
autorelease pool が解放されないんで、一時オブジェクトがそのままメモリ上に
残ってしまっているのでは?
そういう場合は自前で autorelease pool を用意して、ループのブロックを
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// ループ内の処理
[pool release];
}
とかすると幸せになれるかも。
その辺のことがわかってる人だったらゴメソ
- >>390
ども。萩原本持ってるんで概念は一読してるんですが、
理解が及んでない感じで試しては落ち試しては落ちを繰り返してます。
けどこの辺は手前で格闘しとかんと身に付かない気もするし、
頑張ってみます。
- 落ちるということはおそらく解放後のオブジェクトを参照しているという
ことですよね。一時オブジェクトとして使い捨てるものと、それでは
都合が悪いものとの峻別ができていないのではないでしょうか?
どの言語でやるんでもメモリ管理はひとつの山場ですんで頑張って下さい。
- 誰か俺に frame と bounds の違いをわかりやすく説明してくれ!
毎回混乱する。
- >>393
俺もまだ混乱している
- 両方試して動いたほう採用
- >>395
その場はそれでしのげるかも知れんが、そういう不確実な部分を抱えている
というのは何だか不安じゃない? 絶対に自分以外は使わない、というなら
別だけど……
- >>393
>frame と bounds
ぐぐったら、はじめに出てきた(w
- >>397
嘘こけ。俺がぐぐったらこいつがはじめに出てきたぞ。
ぱっと見ただけだけどビンゴじゃないこれ?
ttp://www013.upp.so-net.ne.jp/tanken/Expedition/expedition.html
- シューティングおもろい。レベル12以上無理。
けどマジでメモリ使用量増えていくな。
これ、やったら再起動すれば大丈夫?
すげー怖いぞゴルァ
- >>399
OSまでメモリリークする事はないよ。見たけどそんなヤバいコードは無い。
単にdeallocの設定が「一切」行われていないのが原因。
配布レベルじゃないとは思うけど、勉強中って言ってるんだし多めに見てやれよ。
-
敵の出現、敵と自機の弾の生成で全部allocのみ。
dealloc release全然無いのね。毎ループ増殖しまくり。
これで動作するんだからOSXが偉いのか良くわからん(w
- メモリ管理が全然なのにそこ迄動作を作れるてのも凄いな
- メモリ管理とかはアプリのデザインとは関係ない部分だからね
そんな部分に時間をかけずに済めば、それに越したことはない
- メモリリークしまくりはまずいっしょ。
- >404
メモリリークを潰すサンプルと考えればよい。
ゲームで遊ぶスレじゃないんでそこんとこ、よろ。
# サンプルとしては、設計があれだが。。。
# どうしても気になる場合はリファクタリングのサンプルとして。。。
- OOP初心者の書き方だな。でも最初がC++でなくて良かったかもな。
変な設計のまま突き進んでる訳じゃないようだし、何度も設計変更
しまくれば経験値上がるだろうな。
ここからソースの整理、メモリリーク潰しの過程を晒してもらえると
価値が出てくるかもな。サンデーグラマーのようだし、まあ煽り気にせず
マターリ頑張ってな。
- >386のプロジェクトファイルを Xcode1.1で開くと
プロジェクトスタイルのGenerate Debug Symbols Onに変更しても
デバッグシンボルをONに出来ないんだけど。
PBからXcodeへの変換が不完全?
buildしても最初のタイトル画の表示部分でEXC_BAD_ACCESSで実行できないし。
-
NSProgressIndicatorとviewDidEndLiveResizeメソッドについて質問させてください。
下記のようにviewDidEndLiveResizeメソッド内でプログレスインジケータを回転(アニメーション)させるtestを呼んだところプログレスインジケータは回転しないのですが、回転しない理由と回転させる方法をご存知の方、教えていただきたくよろしくお願いします。
今のところ、viewDidEndLiveResize以外から呼ばれたtestはきちんと回転します。謎です。
-(void)viewDidEndLiveResize
{
[ self test];
}
-(void)test
{
[progressIndicator startAnimation: self]; //NSProgressIndicator
重く長い処理;
[progressIndicator stopAnimation: self];
}
- とりあえず viewDidEndLiveResize が呼ばれているかどうか調べてみたら。
- 質問です。
一部のアプリケーションは、バンドル名自体は TextEdit.app のように英語ですが、
Finder で表示される時には「テキストエディット」のように日本語で表示されます。
自作のアプリであれをやるにはプロジェクトにどういう設定が必要なんでしょうか?
- Japanese.lproj/InfoPlist.strings
CFBundleName = "テキストエディット";/* This is for the localized "short" name in the app menu bar */
CFBundleDisplayName = "テキストエディット";/* This is for the localized "long" name in Finder, etc */
とか?
- >>411
nib ファイルのローカライズと同じ要領で InfoPlist.strings の日本語 variant を
作成して、CFBundleName と CFBundleDisplayName に日本語名を設定しておけば
いいっつーことですね。サンクス
- >>409
さすがにそういうドチョンボはないです。
isDisplayedWhenStopped=NOなので、非動作時はそもそも画面に
表示されないので。
バックグランドではくるくる回転してるけど、
それがフォアグランドで表示されていないような感じなんだけど...
- 重く長い処理の合間合間に
[progressIndicator display];
を噛ませてみたらどうだろうか。
- イベントループが回っていないんじゃ。
ビーチボールカーソルは出ていないのか?
- >>413
オーバーライドした viewDidEndLiveResize では必ず
[super viewDidEndLiveResize]
を呼べ。
ってドキュメントに書いてあるけど、これは関係ない?
- >>414
いけそうな気がしたのですがダメでした。
助言していただき、ありがとうございます。
>>415
ビーチボールカーソルって虹色のやつですよね?
虹色カーソルは回っています。
ViewDidEndLiveResize以外のルーチンからtestが呼ばれたときも回っているので,
ViewDidEndLiveResize固有の事象ではないと思って放置していました。
関係あるのですかね?
ご指摘感謝します。
>>416
本件は全くのノーケアでした。
testを呼ぶ前に[super viewDidEndLiveResize];を挿入してみましたが、
状況は変わらず、プログレッシブインジケータは表示されるものの、
回ってはくれません。
この辺のドキュメントを読んでみます。
皆さんありがとうございました。
- 追伸
inLiveResize == YESの時
progressIndicatorが回らないような気がしてきました。
NSProgressIndicatorソースコードって
Developerフォルダに入ってたりしますか?
- プロセスビュアーって無くなってしまったんでしょうか?
代わりになるのがアクティビティモニタって事なんでしょうか
- そうだよ
- 質問です!
id型のオブジェクトにcompare:とかlengthとかのメッセージを送ると
multiple declarations for method 'compare'
という風に警告を受けてしまうのですが、これを回避する方法って無いでしょうか?
実質的に害はないのですが、なんだか気持ち悪いもので。
ちなみにオブジェクトの中身は動的に決まるのでキャストはできません。
- >>421
キャストしない限り警告される。
どうしても嫌ならisKindOfClass:で振り分けてキャストシル
- >>408
重たい処理を別スレッドで走らせる方法ですこれをやると虹色カーソルが出なくなると思います
これで解決するかどうかはわかりませんが前にNSThreadの話題が出てた事だし参考までに
-(void) viewDidEndLiveResize
{
[self indicatorStart];
}
- (void)threadTest:(id)obj
{
id pool = [[NSAutoreleasePool alloc] init];
重たい処理;
[obj indicatorStop];
[pool release];
}
- (void)indicatorStart
{
[thinkIndicator startAnimation:nil];
//aTargetはレシーバとなるオブジェクトanArgumentはメソッドへの引数
//よく分からん場合は両方ともselfで動かしてみて駄目な場合はNSThread関係のサンプルを色々参考にして下さいな
[NSThread detachNewThreadSelector:@selector(threadTest:)
toTarget:(id)aTarget withObject:(id)anArgument];
}
- (void)indicatorStop
{
[thinkIndicator stopAnimation:nil];
}
ちなみに私はこの重たい処理が下手すると一時間くらいになっちゃうプログラム書いてます。。。
- あの、Xcode 使ってる人に聞きたいんですが、Xcode の補完機能ってクラス名や
メソッド名の補完だけですよね。Project Builder のエディタのプラグインである
ODCompletionDictionary のようなマクロを展開してくれる機能なんかはあるん
でしょうか? もしくは、そういうプラグインをサードパーティが提供することは
可能なんでしょうか?
マクロの辞書鍛えまくったんで、Panther にして IDE を Xcode に移行した後も、
なんとかしてこの辞書を使いたいんですが……
- >424
マクロもenumもインスタンス変数もローカル変数も引数もC関数も補完します。
展開するとマクロの意味がないので展開はしません。
メソッド、関数は引数並びも補完し ctrl+/ で次の引数に移動できます。
これと ctrl+E での行末への移動を使うとかなり快適ですね。
引数を取るマクロは今のところ使ってないので引数並びを補完するかどうか知りません。
- >>408
重たい処理をしているあいだは回らないのは当然。並列してふたつの処理
(きみのコードとプログレスバーの処理)はできないから。
たしか、プログレスバーの描画を別スレッドで行うオプションがあったように
思うが、それは試した?
- >>425
マクロを展開するというのはプリプロセッサのことをいってるんではなくて、
例えば、init を
- (id)init
{
self = [super init];
if ( self ) {
_initialization_code_
}
return self;
}
に展開する。とかいうようなことです。
自分の場合、クラスやプロトコルの名前をまるごと一般的な実装例に展開するように
辞書に登録しているので、この辞書によるマクロ展開機能が使えないのは痛いなあ
と思っているわけでして……
- 補足して言っておきますと、マクロの展開(といういい方がまずいのか)というのは
補完というよりはかな漢字変換みたいな機能のことです。ODCompletionDictionary
の場合、上の例なら init とタイプして escape キーを押すと、下のコードに置換
されます。念のため。
- >>422
ありがとうございます。
そうなんですか。
せっかくの動的結合なのになんだかもったいないですね。
>>418
ウィンドウリサイズのイベントループの中ではインジケータは動かないってことなのかな?
viewDidEndLiveResizeもDidEndとはいってもイベントの中のはずなんで。
viewDidEndLiveResizeの中で直接呼ばないでNSTimerでもかませたらどうでしょう?
ウィンドウリサイズのイベントは終わらせて、別ループでインジケータを走らせるって感じで。
>>426
インジケータのアニメは何もしなくても別スレッドで動いてるもんだと思ってましたが違います?
>>408ではviewDidEndLiveResize以外ではちゃんと回るっていってるし。
- >> 424
そういうのは「略称展開」とか abbreviation expand とか言うんんじゃないの?
xcodeの標準の機能にはないようだけど、AppleScript書いて代用してみるとか、
ことえりに登録するとかかなぁ。
コード書きに専念するならxcodeは使いにくいので、emacs使ってるよ。
で略称展開の必要感じたら abbrev に登録する。
あんましxcode一本だけにこだわらないほうが幸せになれるんじゃないかな。
- emacs か…… よく聞くけど使ってみたことないなあ。
前から気になってはいたんで、ちょっと触ってみようかなあ。
でも、Terminal から起動できるものやら X11 上で動くもの、今ちょっと調べて知ったん
だけど、Carbon 版なんてのもあるね。430 さんはどれ使ってんですか?
でも emacs って CUI ベースのエディタですよね。俺、マウスないとなんか不安(笑)
使いこなせればそっちの方が速いとは聞きますけどね。
- 情報が多いのでCarbon版を愛用してるよ。
マウスも*ある程度*は使えるけど、直に使わなくなるでしょう。
一ヶ月辛抱して使ってみそ。
- ダブルクリックで起動できて Aqua なウィンドウの Carbon 版 emacs なら
比較的すんなり入っていけそう。とはいえ、各種設定やカスタマイズやら、
手になじむような環境を実現するには emacs lisp が必須…… ってわけで、
Web で情報を収集してきまつ。430 さんありがとう。
- コレクションクラスについて教えてくダサい
NSArrayとNSDictionaryは分かるんですけど、NSSetとCFBug(NSBagってのはないな)
っていうのはどんな構成で値を保持するもんなんでしょうか?
- あ、CFBug -> CFBag ですね
- しばらくwindows環境でVBを使ってプログラミングしました。
macに乗り換えたのですが、isightを使ったアプリケーションを
趣味で開発してみたいと思い始めました。
そこで質問なのですが、isightの制御するのにはQuickTimeAPIなど
を扱うようですが、RealBasicとCodeWarrirorそれに10.3に付属して
いたDeveloper用の開発環境ではどれがベストなのでしょうか?
- >>434
NSArray……順序の概念あり
NSSet ……順序の概念なし
CFBag ……シラネ
>>436
開発言語は何? やっぱ Basic でないとダメなの?
- AppleScriptあたりから制御できないかな。
Objective-Cでやるとやっぱり最初はオブジェクトの考え方に翻弄されるかも。
まぁ、まずは無料なんだからXcode試してみては。
BasicからCやJava始める時のよく引っかかるポイント
・if文とかでif(a=b){}としても等しさを比較してくれない。if(a==b){}とする。
・行の最後は「;」。
・ポインタで泣かない。
基礎知識得た後でこのページ一読しとくとよさげ
ttp://member.nifty.ne.jp/maebashi/programmer/pointer.html
・クラスで泣かない。
Appleで引っかかるポイント
・MSみたいに日本語資料豊富に用意してないけど泣かない。
- 438は親切そうだけど実は初心者なので適当に読みながすよろし。
- ちょっと前に質問した 410 です。
Project Builder にて InfoPlist.strings の日本語 variant を作り、
CFBundleName, CFBundleDisplayName などにアプリケーションの
日本語名を設定したのですが、ビルドしても、Finder が日本語名で
表示してくれません。他に何か設定が必要なのでしょうか?
どなたか、自作アプリに日本語名を付けた方はいませんか?
- CFBundleDisplayNameは日本語ではダメではにゃいですか?
ttp://msyk.net/macos/jaguar-localize/
- ああ、わかったわかった!
まず Info.plist のエントリに CFBundleDisplayName を登録する必要が
あったみたい。日本語 variant をいくら設定しても、肝心のキーが Info.plist に
設定されていないとダメなんだね。Info.plist と InfoPist.strings の関係が
ようやくわかったっぽい。
というわけで、無事に日本語名で表示させること成功しました。
439 は的外れなことを言っているが、その情報は役に立ったので一応感謝しておく。
- スマンスマン 文頭に「Info.plistの」が抜けてた。
ということでどういたしました。 >>410
- 質問す。
10.3からターミナルで日本語を入力するとバックスラッシュでエスケープされた文字になるけど、
あれをもとの日本語に戻すにはどうすれば良いの?
NSTaskでtarとかzipを実行したときのログを表示したいんだけど、
日本語は全部エスケープされた状態で出てくるもんで。
詳しい人おながい。
- 10.2で設定していたことを、10.3で忘れているだけだとおもうのだが?
“ウィンドウ設定”の“エミュレーション”で“非アスキーをエスケープする”のチェックをはずす。
あとはこの辺の設定
cat .inputrc
set convert-meta off
set meta-flag on
set output-meta on
それとも、bashなのにtcshの設定ファイルをいじっているとかか?
- >>445
ありゃ、違うんよ。
ターミナルの話じゃなくて、自作のプログラムでエスケープされた文字を読込みたい、ということ。
分かりにくい書き方でゴメソネ。
NSTaskを使ってtarでファイルを圧縮するとき、
NSPipeをつなぐと圧縮中のパス名がPipeから出てくるんだけど、
10.3からは日本語はバックスラッシュでエスケープされた文字が出てきちゃうんで、
それをそのまま表示しても、どのファイルを扱っているのかわけ分からないよね。
なんでエスケープされた文字を日本語に戻したいんだけど、どうすれば良いんでしょうか?
という質問です。
エンコード一発でOKってものじゃなさそうだけど、何か一般的な方法ってある?
あ、UNIX初心者なんで変なこと言ってたらごめん。
- これの下のほうの「Problem Number Two」ってとこのコードで
NSASCIIStringEncodingのとこを適切なエンコーディングにすればいいと思う。
ttp://cocoadevcentral.com/articles/000031.php
- 追記。マルチバイト文字のときは途中で分かれちゃうかもしれないから
dataを全部つないでからNSStringにしたほうがいいかもしんない。
- >>446
自作のプログラムもなにも、既存のtarをつかうのであれは適切なエンコードを知るには
実行するときの優先言語環境が問題であることに変わり無いとおもうな。
- >>447
NSString *string=[[NSString alloc] initWithData:
[handle readDataToEndOfFile] encoding:NSASCIIStringEncoding];
のことをいっているんだと思うけど、
10.2まではNSUTF8StringEncodingを指定することで日本語が読めた。
10.3だとUTF8ではバックスラッシュでエスケープされた文字が出て来る。
もしかしてエスケープを元に戻してくれるエンコーディングがある?
>>449
なるほど。それは全然考えてなかった。
10.2まではUTFだったんであまり気にしてなかったんだけど、
今回はエスケープ前のエンコーディングも問題になるのかも。
(ただエスケープされた日本語は3byteっぽいのでやっぱりUTF8+エスケープのような気もする)
ちなみにさ、優先言語環境ってtarに影響する?
多言語機能はOSX固有の機能かと思ってたけど。
要はどうやってエスケープをしているのかが分かれば、
それを逆にするだけだと思うんだけど・・・
誰か助けてー
- Document-Based Application に関する質問です。
NSDocument のドキュメントに以下のようなサンプルがあったんですけど、
- (BOOL)loadDataRepresentation:(NSData *)data ofType:(NSString *)aType {
NSAssert([aType isEqualToString: MyDocumentType], @"Unknown type");
fileContents = [data copyWithZone:[self zone]];
return YES;
}
これって、なんで渡されてきた data を copy してるんでしょうか?
単純に retain するだけじゃ何か問題あるんでしょうか? copy にかかる手間が
無駄だと思うんですが。
- 多言語機能の何がOSX固有?
LANG= ; tar --help?
LANG=ja_JP.UTF-8 ; tar --help?
LANG=ja_JP.eucJP ; tar --help?
- >>450
いや、そんなエンコーディングはない。問題点をよくわかってなかったみたいだ。ごめん。
ちなみにpipeからとってきたファイル名ってどうやって表示してる?
標準出力/NSTextViewとか。
- >>451
まあ、Apple のサンプルにはけっこう変なのがあるんだけど、
たぶん、以下のどれか。
(1) NSData は immutable だから、copy してもどうせ retain される
だけだべ、と思っている。
(2) data がほんとは NSMutableData のインスタンスかもしれない。
げっ、もしそうだったら、どっかから変更されちゃうかも。
(3) メモリの局所性を高めるために、自身と同じ Zone にメモリを置いておきたい。
まあ、おれは普通に retain するけど。問題が起こるようなら copy
すればいいんじゃね?
てか、まあ、どうせ他のオブジェクトに変換するだろうけど。
- あ、もちろん全部仮定の話だから。
ほんとに - [NSData copy] が retain するだけかどうか、とか調べてないよ。
- >>446 NSNonLossyASCIIStringEncoding かな?
ttp://www.tech-arts.co.jp/macosx/macosx-dev-jp/htdocs/2800/2871.html
- >>454
勉強になります。(1), (2), (3) のすべてが考慮されている
という可能性もありますね。もしそうならなかなか奥深い。
こういうのさらっと書かないでコメントとか付けといて欲しいなあ。
- >>451, 454
(4) retatinしてdataをいじると、dataを参照していた別の誰かが
(いた場合に)困ることがあるから。
ってのが妥当じゃない? 誰がどういう data を
- (BOOL)loadDataRepresentation:(NSData *)data ofType:(NSString *)aType
に渡して呼びだすかは少なくとも建前上は知らないんだし。
なので、retain ではなく copy をするのがパターンとして正解と思うな。
自前で決してdataをいじらないなら、retainでもいいんじゃない?
どうでしょう?
- あ、NSDataだから自前で変更はできないのか。
ということで(4)は有りえないな。失礼。。。
- と思ったが、(NSData *)なので参照先を変えることは可能か。。。
なんか恥ずかしい。
- >>452
そっか、優先言語=NSBundleによる多言語対応、しか頭に無かったもんで
もうちょっと勉強するよ
>>453
とりあえずNSTextViewに表示してる。
最終的には変わるかもしれないけど、まあ最悪はNSTextに展開してコピーということで。
>>456
おおお、これっぽい。
あとで試してみます!
ベリーさんくす
- >>454
(3)に一票。
Sketchのコード見てると大体NSDocumentと同じzoneにオブジェクトを確保しようとしてるからね。
(2)だったら・・・鬱
ちなみに(3)に投票しといてこんなこというのはあれだけど、
copyWithZone:は意味無いかも。
NSZone *zone=NSCreateZone(NSPageSize(), NSPageSize(), YES);
NSSetZoneName(zone, @"test_zone");
NSData*data=[[NSData allocWithZone:aZone] initWithContentsOfFile:@"/hoge.html"];
NSLog(NSZoneName([data zone]));//(1)
data=[data copyWithZone:aZone];
NSLog(NSZoneName([data zone]));//(2)
(1)(2)ともDefaultMallocZoneが出力される。
- >462
aZoneはいつ確保されるんだろう。。。ドキドキ
- >>463
>aZoneは
nil
- これならOKみたいだけど、そうするとcopyWithZoneって???
-------
NSZone* zoneA = NSCreateZone(NSPageSize(), NSPageSize(), YES);
NSSetZoneName(zoneA, @"zoneA");
NSZone* zoneB = NSCreateZone(NSPageSize(), NSPageSize(), YES);
NSSetZoneName(zoneB, @"zoneB");
NSData* dataA = [[NSData allocWithZone: zoneA] initWithBytes: 0 length: 0];
NSData* dataB = [[NSData allocWithZone: zoneB] copy];
//^^^^^^ [dataA copyWithZone: zoneB]なら(1)==(2)
NSLog(NSZoneName([dataA zone])); //(1) = zoneA
NSLog(NSZoneName([dataB zone])); //(2) = zoneB
- >>463
なるほど、DefaultMallocZoneで見事に正解だなw
ま、
NSData*data=[[NSData allocWithZone:zone] initWithContentsOfFile:@"/hoge.html"];
NSLog(NSZoneName([data zone]));//(1)
data=[data copyWithZone:zone];
NSLog(NSZoneName([data zone]));//(2)
でもダメだけどね
>これならOKみたいだけど、そうするとcopyWithZoneって???
つうかNSDataだとダメみたい。
NSObjectだとちゃんとzoneをセットできるよ。
- >462
>>454
(2)だな。
copyWithZoneの挙動は
NSData* dataA のときは retainして、
NSMutableData* dataA のときは copyしてた
- 467補足
NSMutableData*をNSData*で受けたときね。
- 気になって調べてみました。
- (IBAction)test:(id)sender
{
NSString *classNamesFilePath;
NSArray *classNames;
NSEnumerator *classNamesEnum;
NSString *className;
NSZone *zone = NSCreateZone( NSPageSize(), NSPageSize(), YES );
NSSetZoneName( zone, @"zone" );
classNamesFilePath = [[NSBundle mainBundle] pathForResource:@"ClassNames" ofType:@"plist"];
classNames = [NSArray arrayWithContentsOfFile:classNamesFilePath];
classNamesEnum = [classNames objectEnumerator];
-
while( (className = [classNamesEnum nextObject]) ) {
NSString *firstObjZoneName, *secondObjZoneName;
Class targetClass = NSClassFromString( className );
id object;
NS_DURING
object = [[targetClass alloc] init];
NS_HANDLER
object = nil; NSLog( @"Can not allocate %@ class!", NSStringFromClass( targetClass ) );
NS_ENDHANDLER
if( ! [object respondsToSelector:@selector(copyWithZone:)] )
continue;
firstObjZoneName = NSZoneName( [object zone] );
object = [object copyWithZone:zone];
secondObjZoneName = NSZoneName( [object zone] );
if( ! [firstObjZoneName isEqualTo:secondObjZoneName] )
NSLog( @"%@ class is poor!", NSStringFromClass( targetClass ) );
}
}
- ClassNames.plist は
http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/index.html
http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/ObjC_classic/index.html
のクラスリストからNSScriptClassDescription、NSDistantObject の2つを排除したものを
ASCII形式のプロパティーリストに仕立てた。
排除したのはallocかinitでこけるため。
releaseしてないのはinitで初期化したためかreleaseから帰ってこないものがあったため。
また、NSDataを含むクラスクラスタはテンポラリインスタンスを返してるので参考にはしないでください。
以下結果。
- 2004-02-06 21:24:35.174 testCopyWithZone[1135] NSAppleEventDescriptor class is poor!
2004-02-06 21:24:35.397 testCopyWithZone[1135] Can not allocate NSNotification class!
2004-02-06 21:24:35.398 testCopyWithZone[1135] NSAttributedString class is poor!
2004-02-06 21:24:35.400 testCopyWithZone[1135] NSNumberFormatter class is poor!
2004-02-06 21:24:35.400 testCopyWithZone[1135] NSCalendarDate class is poor!
2004-02-06 21:24:35.401 testCopyWithZone[1135] NSCharacterSet class is poor!
2004-02-06 21:24:35.402 testCopyWithZone[1135] Can not allocate NSPropertyListSerialization class!
2004-02-06 21:24:35.403 testCopyWithZone[1135] Can not allocate NSProtocolChecker class!
2004-02-06 21:24:35.403 testCopyWithZone[1135] Can not allocate NSProxy class!
2004-02-06 21:24:35.404 testCopyWithZone[1135] NSDateFormatter class is poor!
2004-02-06 21:24:35.404 testCopyWithZone[1135] NSScanner: nil string argument
2004-02-06 21:24:35.405 testCopyWithZone[1135] Can not allocate NSDistributedLock class!
2004-02-06 21:24:35.458 testCopyWithZone[1135] NSError class is poor!
2004-02-06 21:24:35.460 testCopyWithZone[1135] Can not allocate NSKeyedArchiver class!
2004-02-06 21:24:35.460 testCopyWithZone[1135] Can not allocate NSKeyedUnarchiver class!
2004-02-06 21:24:35.462 testCopyWithZone[1135] NSMutableAttributedString class is poor!
2004-02-06 21:24:35.462 testCopyWithZone[1135] NSMutableCharacterSet class is poor!
2004-02-06 21:24:35.462 testCopyWithZone[1135] NSMutableData class is poor!
2004-02-06 21:24:35.464 testCopyWithZone[1135] NSMutableIndexSet class is poor!
- 2004-02-06 21:24:35.464 testCopyWithZone[1135] NSActionCell class is poor!
2004-02-06 21:24:35.464 testCopyWithZone[1135] NSAffineTransform class is poor!
2004-02-06 21:24:36.043 testCopyWithZone[1135] *** Assertion failure in -[NSApplication init], AppKit.subproj/NSApplication.m:932
2004-02-06 21:24:36.061 testCopyWithZone[1135] Can not allocate NSApplication class!
2004-02-06 21:24:36.080 testCopyWithZone[1135] *** +[NSPasteboard alloc]: selector not recognized
2004-02-06 21:24:36.097 testCopyWithZone[1135] Can not allocate NSPasteboard class!
2004-02-06 21:24:36.114 testCopyWithZone[1135] *** -[NSPDFImageRep init]: selector not recognized
2004-02-06 21:24:36.131 testCopyWithZone[1135] Can not allocate NSPDFImageRep class!
2004-02-06 21:24:36.162 testCopyWithZone[1135] *** -[NSBitmapImageRep init]: selector not recognized
2004-02-06 21:24:36.163 testCopyWithZone[1135] Can not allocate NSBitmapImageRep class!
2004-02-06 21:24:36.163 testCopyWithZone[1135] *** -[NSPICTImageRep init]: selector not recognized
2004-02-06 21:24:36.163 testCopyWithZone[1135] Can not allocate NSPICTImageRep class!
2004-02-06 21:24:36.166 testCopyWithZone[1135] NSBrowserCell class is poor!
2004-02-06 21:24:36.166 testCopyWithZone[1135] NSPrinter class is poor!
2004-02-06 21:24:36.325 testCopyWithZone[1135] NSPrintInfo class is poor!
2004-02-06 21:24:36.342 testCopyWithZone[1135] NSButtonCell class is poor!
2004-02-06 21:24:36.358 testCopyWithZone[1135] *** -[NSCachedImageRep init]: selector not recognized
2004-02-06 21:24:36.375 testCopyWithZone[1135] Can not allocate NSCachedImageRep class!
2004-02-06 21:24:36.398 testCopyWithZone[1135] NSCell class is poor!
2004-02-06 21:24:36.399 testCopyWithZone[1135] NSRulerMarker class is poor!
- 2004-02-06 21:24:36.626 testCopyWithZone[1135] Can not allocate NSScreen class!
2004-02-06 21:24:36.665 testCopyWithZone[1135] NSComboBoxCell class is poor!
2004-02-06 21:24:36.686 testCopyWithZone[1135] NSSearchFieldCell class is poor!
2004-02-06 21:24:36.713 testCopyWithZone[1135] NSSecureTextFieldCell class is poor!
2004-02-06 21:24:36.726 testCopyWithZone[1135] NSSegmentedCell class is poor!
2004-02-06 21:24:36.726 testCopyWithZone[1135] Can not allocate NSCustomImageRep class!
2004-02-06 21:24:36.727 testCopyWithZone[1135] NSShadow class is poor!
2004-02-06 21:24:36.728 testCopyWithZone[1135] Can not allocate NSEPSImageRep class!
2004-02-06 21:24:36.728 testCopyWithZone[1135] NSSliderCell class is poor!
2004-02-06 21:24:36.728 testCopyWithZone[1135] NSEvent class is poor!
2004-02-06 21:24:38.881 testCopyWithZone[1135] NSFontDescriptor class is poor!
2004-02-06 21:24:39.067 testCopyWithZone[1135] NSFormCell class is poor!
2004-02-06 21:24:39.084 testCopyWithZone[1135] NSStepperCell class is poor!
2004-02-06 21:24:39.110 testCopyWithZone[1135] NSTableHeaderCell class is poor!
2004-02-06 21:24:39.131 testCopyWithZone[1135] NSImage class is poor!
2004-02-06 21:24:39.146 testCopyWithZone[1135] NSImageCell class is poor!
2004-02-06 21:24:39.163 testCopyWithZone[1135] NSImageRep class is poor!
2004-02-06 21:24:39.180 testCopyWithZone[1135] NSTextAttachmentCell class is poor!
2004-02-06 21:24:39.196 testCopyWithZone[1135] NSMenu class is poor!
2004-02-06 21:24:39.211 testCopyWithZone[1135] NSMenuItem class is poor!
2004-02-06 21:24:39.227 testCopyWithZone[1135] NSTextFieldCell class is poor!
2004-02-06 21:24:39.248 testCopyWithZone[1135] NSMenuItemCell class is poor!
2004-02-06 21:24:39.286 testCopyWithZone[1135] NSTextStorage class is poor!
- まあ参考程度に。
-
NSString などは「クラスクラスタ」とよばれていて、alloc で
帰ってくるのはたんなる PlaceHolder(場所取り)オブジェクトで、
その次の init... の...部分や引数の内容で実際のオブジェクト
を確保、init の戻り値として返してくるというものだ。
こういったクラスの場合、 +alloc と -init... は同時に呼び、
init...の戻り値を確保してそれを使わないといけない。
+ alloc の戻り値を信じていると馬鹿を見る。
以上、参考まで。
- 質問です。
無謀にもテキストエディタを作りたいと思い立ち、色々調べているうち、
/Developer/Documentation/Cocoa/TasksAndConcepts/ProgrammingTopics/
BasicEventHandling/Tasks/TextDefaultsAndBindings.html
に行き着きました。Cocoa のテキストシステムの振る舞いを色々設定できるらしい
んですが、ここで紹介されている Text System Defaults って具体的にはどこでどう
設定するんでしょうか。最初は関数かと思ったんですけど、よく見ると辞書のキーの
ようでもあって、なんだかよくわかりません。
- NSUserDefaultです。
NSUserDefaultで設定すれば設定したアプリでのみ有効になります。
Terminalで
% defaults write NSGlobalDomain NSMnemonicsWorkInText -bool YES
てな感じでドメインにNSGlobalDomainを指定すると全アプリが参照するようになります。
確認してませんが、CoreFoundationのCFPreferenceを使うとプログラマブルに設定できるみたいです。
- >>478
なるほど。UserDefaults に設定を set して sychronize しとけば、その時点から
変更が反映されるということですね。UserDefaults というのはプログラマが自分の
アプリの設定を保存するために使うものだとばかり思っていましたが、フレーム
ワークの振る舞いを規定しているようなその他の情報も色々と管理しているという
ことですね。
- ファイルヤフォルダのサムネイルの取得とセットってどうするんでしょうか?
- >480
Finderのカラムビュー、info Panel のそれをいってるのであれば、
取得 -> 根性
セット -> 無理
- >>480
フォルダのサムネイルって何?
アイコンのこと?
- すいませんちょっと勘違いしてました。アイコンの事です。
取得は判ったのですが、FileWrapperによるセットがいまいち判らないのですが、出来ればご教授をお願い出来ないでしょうか?
- >483
こんなの?
http://www.oomori.com/page/cocoa/0000157.html
ちなみにAppleEventでのセットもできると思う。
http://developer.apple.com/samplecode/Sample_Code/Overview/MoreIsBetter/MoreFinderEvents.c.htm
のMoreFEAddCustomIconToItem
あ、IconSuiteなんで128×128アイコンはダメなんだっけ?
- >>484
色々悪戦苦闘してみたのですが、どうしても上手くいきません…
http://www.oomori.com/page/cocoa/0000157.htmlのサンプルコードの場合、
セットする画像がバンドル内のimage.tiff、セットする先がtestWriteImage.tiffになっているのに
setIcon:でセットする画像がNSAplicationIconになっている辺りや、
アイコンをセットするラッパーがimage.tiffを読み込んでいたり、
書き込んだ後にセットしてる辺り等がそもそも理解出来ないのですが、
サンプルコードに間違いがあるという事はないでしょうか?
- >>485
ほんとだ
なんか変だね。
setIcon:は使えないかも、っていうのがあった。
http://www.omnigroup.com/mailman/archive/macosx-dev/2002-September/029490.html
で、そこからリンクされている
http://homepage.mac.com/troy_stephens/software/objects/IconFamily/
はどう?
Carbonみたいだけど。
- みんな Cocoa binding つかってる?
- >>456
のNSNonLossyASCIIStringEncodingで試しているんだけど、なんかうまくいかない。
エスケープはきちんと処理できてるみたいだけど、日本語は結局文字化けします。
NSNonLossyASCIIStringEncodingの前提がそもそも違うのか、
他に何か問題があるのか、さっぱり分からない・・・
ググってもNSASCIIStringEncodingでエンコードしてる例ばっかりだし。
誰かヘルプ!
- >>486
情報ありがとうございます。
setIcon:は壊れているんですか・・・
とりあえずこれだけでもFileWrapperで無駄な努力をせずに済んだ様なので助かりました。
iconFamilyの方もDLしてある程度眺めて見ましたが
iconSet:を代行する処理を自作するとなるとRepやBitMap関係の知識が結構要る様ですね。
carbonの知識も皆無に等しいのでもう少し勉強してから再挑戦する事にします。
484さん(=486さん?)、486さんありがとうございました。
ところでiconFamilyはアイコンを付加するソフト位しか概要が判らないですが、
試しに一つ画像ファイルにアイコンを付加してみたらアイコンをセットしても殆ど同じサイズで、
画質が少なくとも目視レベルでは全く劣化していませんでしたがjpegの圧縮処理を画質優先で最適化する様なソフトなのでしょうか?
- Cocoaに限った話じゃないような気もするけど質問。
OSXのウインドウについているような、グラデーションのかかった影って
一般的にはどういう風に描画するの?
四角いウインドウに影を書くくらいなら、色と透明度を変えつつ直線を引い
たらいいんだろうけど、OSXでは適当な形に作ったウインドウでもきれいな影
がついてるじゃない?
あれを自前のViewの中で再現したいんだけどやり方がわからないのです。
リアルタイムで計算しながら描画したいので、最初から半透明のマスクを
作っておく、という以外の方法があれば教えてください。
- >>490
NSShadow?
- cocoaってflashのactionscriptと似てるんですかね?
取っ付きやすいなら挑戦してみようかな
- systemlog がすっかりfix_prebindingで埋まっちゃってるんですが、どうにかならないのでしょうか。
>prebinding for iTerm done.
>prebinding for firefox-bin done.
>prebinding for IPMessenger done.
せめてソース公開されている物を、このログがでないように再ビルドしたいのですが
何をkeywordに探していけばいいのでしょうか?
dynamically loaded library云々なのはなんとなく行き当たったけどさっぱりわかりません。
- >>490
影を付けたいオブジェクトを白黒2値にする。
何回もぼかす。
それをαチャンネルとしてオフスクリーンにαブレンディングで描画する。
その上にオブジェクトを描画する。
実際には、処理速度の関係でエッジ抽出してそれを拡散したりする。
- 質問です。
どなたか Cocoa の Text System で key bindings をプログラム内で
動的に変更する方法をご存じの方いませんか?
input manager が key bindings を定義した辞書を保持しているらしいことは
わかったのですが、辞書へのアクセッサがないので、どうしたもんかと悩んで
います。NSInputManager のヘッダを見れば、それらしいインスタンス変数が
あることはあるのですが @private となっていて触るに触れません。
Project Builder の環境設定パネルで key bindings の設定ができるんですから、
同じ Cocoa を使ってできないはずはない、と思うのですが……
- >>493 環境変数 LD_PREBIND を定義(内容は何でもいい)してビルドする。
あるいは、ld に -prebind フラグを渡してビルドする。統合環境から
ならこっちの方がいいカモな。
ただ、PBX や XCode は deployment でビルドすると -prebind をつけて
くれるはずなのだが、ちゃんと Deployment にしてる? development は
それ以外にも開発向けに色々やっててコードの最適化もよろしくないので、
ビルドするだけなら避ける方がよい。
あと、消極的方法だが、環境変数 DYLD_NO_FIX_PREBINDING を定義する
と fix_prebinding は働かなくなる。ただ Prebinding 抜きになるので
これはお勧めしない。
詳細は /Developer/Documentation/ReleaseNotes/Prebinding.html や
man 1 ld の -prebind あたりを見るヨロシ。
- >>495
StandardKeyBinding.dict
でググる
- >>497
StandardKeyBinding.dict や DefaultKeyBinding.dict を置き換えれば変更できる
ことはわかっているんですが、これらがロードされるタイミングってアプリケーションの
起動時ですよね。問題はメモリ上に NSDictionary とかの形で存在しているこれらの
辞書にアクセスすることなんすよ。
あ、でも例えアクセスできても mutable じゃなかったらどうにもならないんじゃ……
もしかして、これは自力でカスタムクラスを作るしかないのか……
- って mutable じゃなかったら、ごっそりそのまま置き換えたらいいだけか。
アホだな、オレ。でもアクセッサがないんだよう!
- ありがとう。なんとなく道筋が見えた。
やっぱり直接ピクセルをいじらないと行けないのですね。
ぼかしやエッジ抽出というのが具体的にどうやればいいのかもう少し検討いたします。
- >>489
I think setIcon: is broken.
なんで断定はしていないが。
>ところでiconFamilyはアイコンを付加するソフト位しか概要が判らないですが、
ソフトじゃなくてアイコンを付加するためのクラスのはず。
(MakeThumnailはiconFamilyクラスを使ってアイコンを付けるサンプルソフト)
ヘッダから想像するにアイコンにしたいイメージを元に
iconFamilyWithThumbnailsOfImage:
でiconFamilyオブジェクトを作成して、
setAsCustomIconForFile:
で目的のファイルにアイコンをセットできるんだと思う。
こいつを使えばわざわざsetIcon:を自作する必要は無いはず。
ただ、使用条件が良くわからないのでHPをよく読んでくれ。
ところで>>488に誰か返事くれ
- 何日もずっとプログラムに打ち込んでたら
流石にリファレンス見るだけでも吐き気がする様になってきた…
- >>498
KeyBindingを調べてみても、動的に変更できるようなものはないようだね。
だからアプリ側で実装するんじゃないかな。
たぶん、CocoaのTextSystemもキーテーブルを入れ替えるようには作られていないと思う。
所詮KeyCodeとSelectorの対データだし、PBなどもそうだけど、そのアプリ独自の拡張
しているショートカット機能もあるわけで。
- >>503
俺も散々調べてたんだけど、現状ではそういうインターフェースはないみたい。
だから自力で実装することにしたよ。その算段は以下の通り。
とりあえず、DefaultKeyBinding.dict と同じ形式の辞書をロードして自前の
ビューに保持させ、keyDown: で Control やなんかが押されていた場合には
その辞書を参照して selector を割り出し doCommandBySelecter: を呼ぶ。
対応する key binding がない場合はその key event を interpretKeyEvents:
へまわす。(そうしないと日本語入力できないし)
ま、こんなもんでなんとかなりそうかな。
- なんで Text System の key bindings mechanism にこだわっていたかというと、
key event からの対応する編集コマンドの割り出し、実行を interpretKeyEvent: が
一切面倒みてくれるから。調べたところ、Control-X Control-F みたいな連続した
キーストロークにも対応してるんで、こちらは辞書を用意するだけで Emacs みたい
なキーバインド体系を容易に実現できる。
(対応する編集コマンドを作れるかはまた別の話ね……)
と思ったのだが、その肝心の interpretKeyEvent: が参照する key bindings の
辞書に触れず、interpretKeyEvents: へ渡す前に自力で振り分けることに(泣)
連続したキーストロークとか扱おうと思ったら途端に話がややこしくなりそう
なんだよなあ。ま、趣味のプログラミングですんで、地道にやろうと思います。
長レススマソ
- >>505
やりたいことはなんとなく想像ついてたけど、なんで簡単にできねんだよと思うよね。
ガンガレ
- Finderのアイコン表示やPixelCatの様な
画像のサムネイル表示で画像をセットする処理をしてる時の様な
非同期で処理を行う方法を教えて下さい。
スレッドを作らなくても実現出来るらしいですが、
NSTimerとかで実現してるのでしょうか?
具体的な方法が判らないのでご教授お願いします。
- >507
、、、えっと、日本語で質問してください。おながいします。
- えっと、
サムネイル用に並べたボタン群にそれぞれサム画像を入れる処理の際、
画像のサイズや量がある程度以上だと、ビーチボールが出ますよね。
それを非同期で処理してビーチボールが出ない様にしたい、という事なんですが。
ご教授お願いします。
あとスクロールビュー内にマトリクスを埋め込んだ際、
どうしてもマトリクスが一定以上のサイズにならず、
スクロールが途中迄しか表示出来ないのですがどういった手落ちが考えられますか?
以前自作でウインドウやマトリクス、スクロールビューをセットした時には問題なく出来たので
XCodeのバグを疑ってしまうのですが。
- >>509
ま、NSTimerかNSThreadですね。
後半は分からんけど、それが10.3の仕様と割り切って、
10.3で正しく動くように書くしかないかと。
- >>509
NSTimerだと結局は断続的にレインボウが出ることになると思う。
素直にThreadを使うのが良いかと。
>スレッドを作らなくても実現出来るらしいですが、
の根拠を教えてもらえるとうれしい。
- >511
fopen で開いてちょっとずつ読むとか。
- >>511
>>スレッドを作らなくても実現出来るらしいですが、
>の根拠を教えてもらえるとうれしい。
イベントループ作ればいい。
for (;;) {
NSEvent* event = [NSApp nextEventMatchingMask: NSAnyEventMask....
//...
[NSApp sendEvent: event];
//...
}
>>509
場合によってはスレッドの方が簡単かも。
- >513
2GBのデータを一気に読み込む等をすれば結局レインボーカーソルが回る罠。
- >>514
>2GBのデータを...
問題の本質が異なると思われ。
- Xcode1.1でIBPaletteの新規プロジェクトを作ろうとすると
エラーが出て作成できないのですが、何か間違っていることをしているのでしょうか?
- >>516
新規プロジェクトを生成する時、ソースのテンプレのクラス名をプロジェクト名に置き換えるところにバグがある。
と書いても意味分からないだろうがw、
生成されたソースとヘッダをXcodeで直接(プロジェクトファイルは開かない)開いてみると分かる。
- >>517
どうもありがとうございます。
とりあえず.hファイル3つと.mファイル3つのおかしい所をそれっぽい名前に
書き換えたら問題なく(?)なりました。
他は特に変更しなくてはならない所ないですよね?
- >>518
info.plistとInfoPlist.stringsも一応見とけ。
問題あったかどうかは覚えてないが。
- Info.plist、InfoPlist.strings、palette.tableは問題ありませんでした。
- >515
いや、別に2GBだろうがなんだろうが、でかいファイルを一気に読み込めばレインボーが回るよ。
レインボーが回る原因は、 WindowServer上のそのアプリ用のEventキューに変動がないためであって、
for (;;) {
NSEvent* event = [NSApp nextEventMatchingMask: NSAnyEventMask....
// (1)
[NSApp sendEvent: event];
// (2)
}
であっても1,2,の処理が終わらない限りWindowServerからのEventは受け取れないでしょ?
- とりあえずスレッドで回避してみました。
代わりにサムネイル画像貼付け処理の際、処理途中で一時的に使ったメモリがスクロール表示範囲内なら普通に順次解放されるのに
スクロール表示範囲外に隠れたサムネイルボタンの貼付ける処理になると解放されない(スクロールして表示させると解放される)現象や、
読み込み途中でウインドウを閉じても正常に動作する様にする処理に頭を悩ませてます。
この場合、メモリの解放処理に繋げるにはボタンが「画面に表示される」際に行っている処理に代わる何かのプロセスが必要なのでしょうか?
>>510
この辺りはなんだか解決しました。
普通にスクロール内ビューのサイズをsetFrameで変更したら出来たのですが
試行錯誤の最初にやった時は何故か出来なかったので原因が今いちハッキリせずスッキリしてませんが。
>> の根拠を教えてもらえるとうれしい。
すいません、何処かでチラっと見た記憶が有ったのですが覚えてません。
ただPixelCatなんかをアクティビティモニタで見る限りスレッドは使ってない様ですね。
- いくらアクティビティモニタでもスレッドまでは見えないぞ。
見えていると思っているのは子プロセスでないか?
- >523
スレッド数が書いてあると思ったが...
一回見ただけなので覚えてないが。
top なら th# ってのがスレッド数。
- initとawakeFromNibとapplicationDidFinishLaunchingの使い分けの
慣習ってあるのでしょうか?
- >525
慣習とかじゃなくて、完全に別物だと思うが...
- 526>>
呼ばれる時は違いますが、どこに書いてもかまわないコードってあったりしませんか?
- 少なくともinitは全然違うと思われ
- あ、517は全然関係なし。
nibでインスタンス化したオブジェクトはinit呼ばれないはずだから注意。
- >>528
試しにnibにあるコントローラーのinitにNSLog(@"init")と書いたら表示されたのでinitも呼ばれているみたいです。
例えばNotificationの登録はApplicationDidFinishLaunchingに書くのが一般的なのでしょうか?
- それとUserDefaultsから読み込んでインスタンス変数に設定する場合
よくapplicationDidFinishLaunchingに書かれているのを見ますが、
もしawakeFromNibでNSTextFieldなんかにそのインスタンス変数を
setStringValue:などとしていたら正しい動作をしませんよね?
そういう場合はUserDefaultsからの読み込みはawakeFromNibに書くものなのでしょうか?
- >>331
は解決した?
stray のエラーはおかしな文字コードが紛れ込んでいるせい。
vi とかでファイルを確認するとエスケープシーケンスが付いている部分でエラーを
起こしてるのがわかると思うけど。
- 331 じゃないんですけど、今日ちょうど stray エラーで悩まされた。見えない
文字が入力できるようになってるってものすごいなあ > XCode。補完きかない
けど、エディタは emacs とか使ったほうがいいかもしれない…。英語環境だと
このエラー出ないのかな?
この環境がタダなのはすごく嬉しいんだけど。
- 違うスレにも書き込んでみたんですけど、レスがないのでこちらにも書き込ませてください。
Cocoaでキー判定を行いたいんですけど、どなたか方法をお教え願えませんでしょうか。
また、キーコードなどの調査方法もお教え願えれば幸いです。
-
init は「そのオブジェクトそのもの」の初期化につかうべし。
awakeFromNib は、Nibファイルからロードされ終わった後に
呼ばれる。注意点は、メインの Nib はアプリの起動時に1回
呼ばれるだけだが、Nibによっては必要時にロードされるもの
だってあるって事だ。
例えばちょっと込み入ったドキュメントの場合、ドキュメント
を処理するUIを別のNibにまとめておいて、ドキュメントを開
くごとに Nib をロードするという手がある。こういう時に、
awakeFromNib はロードされるごとにそのインスタンスへ送ら
れる。
applicationDidFinishLaunching はアプリケーションが起動
されたとき必ず1回実行される。漏れなら、UserDefaultsの
処理はここに書くな。もちろん、時と場合によりけりなので
一概にはいえんが。
単純なNib一個のアプリならどれを使っても一緒に見えるが、
複数Nibを活用した大きいアプリを書く時にこの三つの区別
は重要になる。
-
init は「そのオブジェクトそのもの」の初期化につかうべし。
awakeFromNib は、Nibファイルからロードされ終わった後に
呼ばれる。注意点は、メインの Nib はアプリの起動時に1回
呼ばれるだけだが、Nibによっては必要時にロードされるもの
だってあるって事だ。
例えばちょっと込み入ったドキュメントの場合、ドキュメント
を処理するUIを別のNibにまとめておいて、ドキュメントを開
くごとに Nib をロードするという手がある。こういう時に、
awakeFromNib はロードされるごとにそのインスタンスへ送ら
れる。
applicationDidFinishLaunching はアプリケーションが起動
されたとき必ず1回実行される。漏れなら、UserDefaultsの
処理はここに書くな。もちろん、時と場合によりけりなので
一概にはいえんが。
単純なNib一個のアプリならどれを使っても一緒に見えるが、
複数Nibを活用した大きいアプリを書く時にこの三つの区別
は重要になる。
-
長文なのにミスで二重書き込みしちまった。スマソ。
- >>534
file:///Developer/Documentation/Cocoa/Conceptual/BasicEventHandling/Concepts/KeyboardInput.html#//apple_ref/doc/uid/20000902
を見るべし。
簡単に言うなら、View などの NSResponder のサブクラスには
keyDown: というメソッドがあり、これにイベントオブジェクト
が引数でひっついてくる。NSView のサブクラス作ったり、delegate
に実装することでこのメソッドを上書きするとキーボードや
マウスからのイベントを奪えるわけだ。
で、ひっついてきた NSEvent オブジェクトに characters を
おくれば(SHIFTなどの修飾キーの影響後の)文字がNSStringで
かえってくる。修飾キーの影響を受けていないのはcharacters
IgnoringModifiers で帰ってくる。
キーコードが欲しければ keyCode メソッドだ。
なお、テキスト入力の場合は IM にイベントを回してあげない
と正しくテキスト入力ができない。手っ取り早く IMに処理を
渡したいなら interpretKeyEvents: メソッドを叩けばいい。
なお、interpretKeyEvents: の引数は NSArray だ。つまり、
一つのイベントごと渡すのではなく、いくつかのイベントを
溜めておいて、NSArray で一気に渡すことができる。まぁ、
あんまり溜めると応答性が悪くなるのでお奨めせんがな(笑)
まぁ、詳しくは NSEvent や NSResponder のリファレンスを
みてくれ。そして、じっくり悩んでくれ。
- >>538
thx.
なんせOSXでの初プログラミングですので^^;、、、頑張ってみます。
- >>535
>awakeFromNib
質問主じゃないし、
結構ある程度のソフト作れるけど
初心者の頃覚えた少しずれた概念をそのまま深く考えずに修正しないままずーと引きずってた事に気付いたよ
Thx
- >>531
UserDefaultsからの読み込みを一カ所にまとめる必要はねえ。
つーか、必要ならどこで書こうが読もうがかまわねーよ。
スレッド分けてる場合は排他制御する必要があるがな。
だいたい、NSWindowなんかは設定しとけばロード、アンロード時に
勝手に自分のFrameを書いたり読んだりしてるだろーが。
- >>539
悪いこと言わんから、荻原本とヒレガス本を2冊セットで買おう。
値は張るけど、熟読する価値あり。
539 の今回の質問に対する答えはもちろん、これからぶち当たるであろう、
数々の疑問に対する答えがそこにはある、と思うよ。
最初は素直に本でも買って、体系的にまとまった量の知識を一気に吸収した方が
いいと思う。学習曲線の最も急勾配なところを2ちゃんを頼りに登るなんてのは
あまり賢いやり方と思えない。
以上、あくまで私見ですが、アドバイスでした。
- 質問。CocoaをやるにはC++も知っておいた方がいいですか?
いきなりObjective-Cの参考書を見てもわかるなら、
C++やるのは後回しにしたいのですが。
現状。
Objective-Cの参考書は「C言語の知識が必要」らしいので
荻原本と一緒に高橋麻奈「やさしいC 第2版」を注文したところです。
(まだ届いてない)
今迄のプログラミング経験はPerl、PHPをかじった程度で、
Javaは全く知りません。
- Cから説明始めてるC++の基礎本買っといても損はないと思うけど。
- >>543
知らなくても問題なし
- >>544
萩原本でOOPを学ぶということだから、必要がなければ混乱をさけるためにも、
むしろC++のことは勉強しない方がよいと思います。
- レスありがとうございました。
必要がないなら、混乱を避けるためにも、C++は後回しにします。
- >>535, 541
どうもありがとうございました。
簡単な例しかみたことがなかったため、複雑なプロジェクトになった時に
どのように書くと読みやすいのか悩んでいました。
参考にしてよく考えてみようと思います。
- Cocoa+Javaで質問です。
NSImageの画像を回転させる方法って無いんでしょうか?
簡単な画像ビューワを作っているのですが、回転させる方法がわかりません。
//新しいNSImageを作って
NSImage image = new NSImage(new NSSize(300, 300));
image.lockFocus();
//別のNSImageであるobjimgから画像を貼付ける
objimg.compositeToPointFromRect(new NSPoint(0, 0),
new NSRect(new NSPoint(0, 0), objimg.size()), NSImage.CompositeCopy);
//できればここで回転させたい。
image.unlockFocus();
- すみません。549ですが自己解決しました。
drawAtPointとNSAffineTransformでできました。
ってか今日1日潰したのに。。。。
気づくときはあっさりと気づくもんですね。
- ADCからXcodeをダウンロードしようと思い、
Xcode Tools v1.1CDのDawnloadを押すとでるSegmentsの中のXcode_Tools_1.1.dmg.binを落として
解凍したんですが、ディスクイメージをマウントする際に
「セグメントが見つかりません、所属不明なパート」
とでてマウントできませんでした。
segments内のすべてを落とさないといけないのでしょうか?
-
>>550 そこが Cocoa のおもしろさであり、怖さなのよね。
10年以上の実績があるだけに、一見面倒でも実はある程度
を越えた時にすごく楽になるようよく考えられてる。気が
ついた時には嬉しいが、それを知らず遠回りしていた事ま
で気づいた時は酷く鬱だ。
- >>551
いや、だから segment なんだって。
segment = 部分、切片 ってそのまんまじゃん。
全部落としてから先頭の segment をダブルクリックで自動的に結合されるはず。
segment に細かく分割されているのは回線が遅い人への配慮。
1つのアーカイブになってるやつもあるはずだけど。
ってかネタ?
- Cの文法を憶えたくらいの初心者です。
以前買った「やっぱり!」本一冊を見ながら、今になって10.2で勉強しています。
配列データをファイルで管理するようなプログラムを組みたいのですが、
もし、それに近いサンプルがあれば書籍や資料を教えていただけませんか。
- >>554
ヒレガス本 4~6章あたりが良いかもしれません。
KeyTermとしてはNSCoder, NSArchiverあたり。
- こんなの作ってみたけど、どうよ
inline IMP _METHOD(id __obj, SEL __sel){return [__obj methodForSelector: __sel];}
// _imp = [_obj methodForSelector: _sel]; <<< g++ Bus error
template <typename _Tr = id, typename _Ta1 = id, typename _Ta2 = id, typename _Ta3 = id>
class ImpMethod
{
public:
id_obj;
SEL_sel;
IMP_imp;
ImpMethod<_Tr, _Ta1, _Ta2, _Ta3>(id __obj, SEL __sel) :
_obj(__obj), _sel(__sel), _imp(_METHOD(_obj, _sel)){}
_Tr operator *()
{return ((_Tr (*)(id, SEL, ...))*_imp)(_obj, _sel);}
_Tr impFunc(_Ta1 __arg1)
{return ((_Tr (*)(id, SEL, ...))*_imp)(_obj, _sel, __arg1);}
_Tr impFunc(_Ta1 __arg1, _Ta2 __arg2)
{return ((_Tr (*)(id, SEL, ...))*_imp)(_obj, _sel, __arg1, __arg2);}
_Tr impFunc(_Ta1 __arg1, _Ta2 __arg2, _Ta3 __arg3)
{return ((_Tr (*)(id, SEL, ...))*_imp)(_obj, _sel, __arg1, __arg2, __arg3);}
};
- - (void) test
{
NSMutableArray* ary = [NSMutableArray array];
ImpMethod<void> impAdd(ary, @selector(addObject:));
for (int i = 0; i < 10; i++)
impAdd.impFunc([NSString stringWithFormat: @"%d", i]);
ImpMethod<> impEnu([ary objectEnumerator], @selector(nextObject));
for (id obj; (obj = *impEnu) != nil; )
NSLog(@"%@", obj);
ImpMethod<id, int> impGet(ary, @selector(objectAtIndex:));
ImpMethod<unsigned>impCnt(ary, @selector(count));
for (unsigned c = 0; c < *impCnt; c++)
NSLog(@"%@", impGet.impFunc(c));
NSString* str = @"abcdefg";
ImpMethod<NSComparisonResult, NSString*, unsigned, NSRange>
impCmp(str, @selector(compare:options:range:));
ImpMethod<unsigned int> impLen(str, @selector(length));
for (unsigned int t = 0; t < *impLen; t++)
NSLog(@"match=%d",
(NSOrderedSame == impCmp.impFunc(@"c", NSCaseInsensitiveSearch, NSMakeRange(t, 1))));
}
- ここのスレだとHMDTの本は人気ないのかな?
最初の1冊としては一番バランスよくまとまってると思うのだが。
あの本があれば、ヒレガス本要らなくない?
荻原本は一応読んどいたほうがよさそうだけど。
- >>558
HMDTは入門書としてはちょっと・・・。Cocoaの全容をごく簡単に掴むには
いいけどね。
- 個人的に薦めてるのは、ヒレガス本かな。両方読んでも損にはならんでしょう。
ただ、今はCocoa Programming for Mac OS X second edition in April 2004 が出るまでとりあえず保留。
#HMDT本は想定される読者層から外れちゃったので、ちゃんと評価を下せていない(ので、微妙に薦めづらい)。
#“さっぱり本”みたいにWebページが大量削除されれば多少事情が変わるの かも しれないが。
- Webが削除されたから人にはすすめられなくなったな。さっぱり本。
- >>558, 560 and all
ヒレガス本しか読んでないんすけど、ヒレガス本と比べた場合、
HMDTのおすすめポイントってどこらへん?サンプルアプリが派手目な点??
個人的にはヒレガス本で漏れてるAppKitの細かい部分を補える中級書が欲しい、
けど、和書ではなかなかなさそう。
ということで、Cocoa Programming (SAMS) を読んでます。
網羅している項目も、すぐに使えるサンプルも多く、なかなか良いです。
難点は1000頁を越えるので、かなり重いこと。通勤電車で立読みはつらい。。。
ttp://www.amazon.co.jp/exec/obidos/ASIN/0672322307/
- >>562
マジであんなデカ重本を通勤電車で立ち読みしてるのかよ
- バラしてしまえばいいんじゃない? 一度に全部読むわけじゃないし。
- OutLineVIewの実装が載ってっとこ
- >>562
おお、俺も今読んでるぞ、Cocoa Programming。
荻原本、ヒレガス本ときて、次にこれだけど、いい本だよね。
特に Custom Views and Graphics で200ページ近く割いてくれてるのがいい。
NSBezierPath や NSAffineTransform を使った基本的な描画から、簡単な描画
処理の最適化手法まで、手広く、突っ込み過ぎない程度にカバーしてくれてて、
かなり勉強になってる。
今やっと 563 ページ目。ようやく半分。
確か 26 章のサンプルがテトリスなんだよな、楽しみ。
- 誰も触れてないけど>>556-557って何なの?
- >>567
いかにして可読性を低下させるか。
および、templateによる、汎化と特化の2面性について。
着想はいいんだけどさ。。。
素直に 普通に IMPとってくりゃいいじゃないのって思う。
- HMDTのトップページ
最近、読み込みにやたら時間かかるんだよなぁ
なんでだろ
- Cocoaで実行中のOSバージョンってどうやって調べればいいのでしょうか?
gestaltとかないのかな。
- HMDTを参考にdrawrectで表示した矩形をマウスでドラッグして任意の位置に動かし、マウスイベント内で移動量や移動後の座標値
を格納して、ボタンを押すとその移動量とかをテキストフィールドに表示するというのを試しに作ってみたのですが、
矩形は自由にドラッグで移動できるのにボタンを押しても0となってしまいます。
マウスイベント内やdrawrect内ではデバッガで値を見ても格納されているのに、
ボタンを押すところでは他の座標値も含め0になってしまう原因が判りません(;´Д`)
- >>556
implFunc(...)のかわりにoperator()(...)って使えないのかな?
メリットとしてはIMP使うので多少は早くなるのかもしんないのと、
IMPを意識しないでつかえるのと、
あとはSTLとかと組み合わせられそうなことかな?
- >>570 NSProcessInfo 使うヨロシ
- >>571
アウトレットをちゃんとつないでないとか
setStringValue:つかってないとか
ボタンのアクションが間違ってるとか
- >>574
あるんだよね、それ。
俺、それで結構長い時間悩んだことあるよ。 (つд`)
571 ガンガレ!
- >>573
ありがとうございます。
NSString *versionName = [[NSProcessInfo processInfo] operatingSystemVersionString];
ですね。これって、リターン値の比較用コンスタントってどこかに定義されていまうか?
それと
Available in Mac OS X v10.2 and later.
ってことなんですけど、10.1とかはどうやって判定すればよいのでしょうか?
- >>576
>This string is human readable, localized, and is appropriate
> for displaying to the user or using in bug emails and such.
> This string is NOT appropriate for parsing
って書いてあるでしょ。
Backward Compatibility を問題にしているのなら、AppKit の
ReleaseNote を読んでごらん。
- >>577
>AppKit の
>ReleaseNote を読んでごらん。
ありがとさん。
#import <NSApplication.h>
if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_0) {
/* On a 10.0.x or earlier system */
} else if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_1) {
/* On a 10.1 - 10.1.x system */
} else if (floor(NSAppKitVersionNumber) <= NSAppKitVersionNumber10_2) {
/* On a 10.2 - 10.2.x system */
} else {
/* 10.3 or later system */
}
ってことですね。floorってなんだろう。
The floor() and floorf() functions return the largest integral value less
than or equal to x.
なるほど上は、マイナー番号削って調べる例か。とにかくありがとさん。
- NSTextView と NSScrollView に関して質問です。
NSScrollView が表示している文字の範囲を range で得たいのですが、
何か良い方法はあるでしょうか?
NSScrollView - documentVisibleRect で rect は得られるのですが、
その rect に含まれる文字の range を得る方法がわからないのです。
- >>579
CocoaBrowserのソースにあったと思うよ。
読んでみ。
- >>580
見つけました。サンクス!
他にも色々と参考になりそうな部分がありますね。
( ゚Д゚ )ウマー
- NSFormを使っていて、Cellの中身のほうで文字列が特定の条件を満たすとき
赤色の文字を表示するようにしています。しかし、マウスクリックでこの
文字列を選択すると、文字色が黒になってしまい、選択解除しても黒のままです。
AttributedStringで赤色にしているのですが、他に良い方法はありませんか?
あるいは、選択/選択解除のイベントがとれればそれを拾って、赤色に戻しても
かまわないんですが、NSForm/NSFormCell(とその先祖)には該当する
Notificationなどが定義されていないようです。
よろしくお願いします。
- >>582
>文字列が特定の条件を満たすとき 赤色の文字を表示する
Formatter を自作すれば編集中の文字列にあわせてリアルタイムに文字の色を
設定できるよ。Formatter を set するインターフェースは NSControl ( NSForm
の先祖)にあるから、NSForm でも使えると思うけど。
まあ、Matrix ってことで何となくややこしそうではあるね。
上のやり方でうまくいかなかったら NSTextField で代用するのが楽かな。
NSTextField ならデリゲートに textDidChange: を送るようにできるし、
NSControlTextDidChangeNotification も使える。ま、ラベルと一緒に
縦に並べとけば使う側から見て違いもわからんし。
- あ、選択/選択解除か。textDidChange: じゃねえや。ゴメソ
- >>582
試してないがセルをサブクラス化して、drawXXX:で書くしかない。
- >>583,584
4行2列でタイトル+文字列を配置したいんですが、NSTextFieldだと
ウインドウリサイズしたときに、横に4つならべることになって、
きれいにリサイズできるようにラバーバンドを設定できないんです。
それと、色を変える条件が行ごとに違っているのでNSFormに一括して
ルールを設定することができません。NSFormCellはNSControl一族では
ないのでFormatterを貼れなくてそれでsetAttributedStringすることに
したんです。
>>585
サブクラス化しかないですか。はぁ。
それを使うようにするのは、NSForm -setCellClass:でやればできるの
でしょうか。っていうかやってみます。
アドバイスいただきありがとうございます。
- >>586
> 4行2列でタイトル+文字列を配置したいんですが、NSTextFieldだと
> ウインドウリサイズしたときに、横に4つならべることになって、
> きれいにリサイズできるようにラバーバンドを設定できないんです。
ううむ。ラバーバンドの設定で自分の思うようなリサイズができない場合、
autoresizing に頼るのをやめ、ウィンドウのリサイズに合わせてマニュアルで
やるというのもありでは。NSWindow のデリゲートメソッド
windowWillResize:toSize: はウィンドウのリサイズ中、mouseDragged:
みたいに何度も送られ続けるので、これを使って4行2列を適切にリサイズ
するようにしてみては? drawRect: の要領です。
って、もう Cell のサブクラス書いちゃった?
解決したんならそれはそれでいいですけど、一応代替案ということで。
- >>587
タイトル+文字列をNSViewのSubViewに入れてまとめてしまえば
NSFormCellと同じようにauto resizeできるんじゃないかいな
- >>588
4行2列って
ラベル フィールド ラベル フィールド
ラベル フィールド ラベル フィールド
ラベル フィールド ラベル フィールド
ラベル フィールド ラベル フィールド
こんなのを想像してるんだけど、違うのか?
ラベルとフィールドを組みにしても、2列目の水平位置がやっかいなことに
なりそうじゃない?
つーか、autoresize の機能に proportional な位置決めがあったら
いいなあとかよく思うよ。水平位置は中央、垂直位置は下辺から 1/4 を
維持、みたいな。
- 流れを読まずコピペすまそ。
これXcodeで作ったみたいですが
そうなるとCocoa?なのかな? 部分部分でCarbon使ってるとか?
全く無知な自分が推測で言っても恥ずかしいだけですが。
>
> ∧∧
>Γ(,,゚Д゚)
>Σ∪【《〓0☆Ξ=∞ =∞ =∞ =∞ =∞ =∞
>~て ) _)
>(/
>
>MacOSX対応 ネタシュー「スペースギコハリャーン」
>
>ども、お久しぶりです。
>2年半の月日を経てギコハリャーンシリーズ第2弾をリリースしました。
>ついでに、おまえもなーるたいぷも復活。
>
http://www.geocities.jp/adoveproject/ghgikoharri.html
>NVIDIA系の検証が少ないですが多分大丈夫でしょう;;
個々のパーツはアマチュアLVなのは置いといて
ポテンシャルはもの凄いと思ったです。
- >>590
Cocoaではない。Mach-O Carbonだな
- Cocoa でも飲んで、もうひと頑張り!
( ・∀・)つ旦
- >>592
湯飲みでココア?
- >>593
( ・∀・)つ c|_| ホラヨ。マグカップ!
- ココアといえばバンホーテン。長嶋さん...
- 別のスレ
【Yahoo!】OSXでメッセチャット【誰か作って!!】
http://pc.2ch.net/test/read.cgi/mac/1078162637
で問題が発生しています。
そのスレにリンクが張られているソフトの改造をして
ビルドしようとするとエラーが3つでます。
NSLayoutManager.h:68: cannot find protocol declaration for `NSGlyphStorage'
こういったものですが、Cocoaのヘッダの中身でエラーがでるのです。
簡単なことならソースを追いかけていくことができるのですが、
NSGlyphStorageでぐぐっても、ほとんどヒットせず
この問題はまったくお手上げで、どうしたらいいか分かりません。
お助けいただける方、智慧を貸して下さい。
- Available in Mac OS X v10.3 and later.
ということだが、10.2 以前でビルドしようとしているという可能性は?
- >>597
失礼しました、環境を書いておくべきですね。
私の環境は
・Mac OS X 10.3.2(Panther)
・Xcode 1.1(ヘッダの書き換えとか、勝手な変更は加えていません)
・PowerBook Pismo 500MHz
・RAM : 640MB
ソースは先程のスレのリンクから得ることができます。
改造したポイントもそのスレに書いておきました。
- >>598
sudo fixPrecomps
してみるとか? 関係ないかも
- >>596
>別のスレ
charla2 ?
これさ、10.2.8 & PBで作成されているよね。
この環境なら、buildできるよ。
Xcodeで互換オプションなかった?(持ってないので試せない)
(1)プリコンパイルヘッダーMyCocoa.h内で宣言されているから外してみるとか
#define MAC_OS_X_VERSION_MAX_ALLOWED MAC_OS_X_VERSION_10_1
(2) 使われないものなら、存在しない宣言、変数などは偽装する
@protocol NSGlyphStorage{} をつくる
- ココアといえばコデン
- >>599,600
レスありがとうございます。
MyCocoa.h
#define MAC_OS_X_VERSION_MAX_ALLOWED MAC_OS_X_VERSION_10_1
というのをコメントアウトし、sudo fixPrecompsしたところ通るようになりました。
これから通信部分を日本語に直す作業にとりかかります。
- 丁寧に書いていただいたのに、レスが簡素すぎる気がしますので。
>>599
一度に二つのことをしたので分かりませんが、効果はあったかも知れません。
Cocoaのヘッダがおかしいとは思えないので
プリコンパイルヘッダの混乱は妥当な判断だと思います。
今までCodeWarriorでC++/Carbonやってたもので
あまりXcodeやPBには詳しくないのでやり方を知らなかったのですが。
>>600
> charla2
はい、そうです。
自分が使うわけじゃないのですが、面白そうなのでいじってみることにしました。
>Xcodeで互換オプションなかった?(持ってないので試せない)
これは分かりません。
大抵のものはXcodeで手直しなくビルドできていますから
互換オプションのお世話になったことがないのです。
>(2) 使われないものなら、存在しない宣言、変数などは偽装する
荒技ですね。
該当のヘッダが読まれる直前に書くか、
書き込み禁止のヘッダを操作することになるので躊躇していました。
- >>587
まだ、実装していません。
自動リサイズ位置決めプログラムのほうが難しそうなんですけど、
なんかサンプルとかありますでしょうか?
>>588
InterfaceBuilderってそういうViewのネストを増やすと、極端に
速度低下してしかも不安定になるので、あんまりしたくないんです。
NSViewのサブクラス化をIBでつくって配置する方法がわかれば
やってみようかとは思うんですけど、よくわからないものですから。
>>589
>ラベル フィールド ラベル フィールド
>ラベル フィールド ラベル フィールド
>ラベル フィールド ラベル フィールド
>ラベル フィールド ラベル フィールド
そうです。一応、同じサイズで作ってNSFormの位置をあわせて
おくと各行の水平位置はあいます。
- >>604
>自動リサイズ位置決めプログラムのほうが難しそう
なんで? ウィンドウの幅から相対的にフィールドの位置と幅なんてすぐに
求められるし、そしたら後は setFrame: するだけでしょ。サンプルがないと実装
できないほどのもんでもないと思いますけど。
つーか、まずはコード書こうよ…… _| ̄|○
- とかなんとか言ってるうちに俺実装できちゃったYO!
といっても、1行だけの
ラベル フィールド ラベル フィールド
っていう構成だけど。なんとか2列目の水平位置もうまいこといった。
でもまあ、こっから行を増やすのなんてどうってことないし。
ま、実現できることはわかったので、後は 604 の頑張り次第かな。
でもまあ、これでやったとしても formatter の自作が残っているわけだが……
- バインディングの配列コントローラに関して質問なんですが
http://homepage.mac.com/mkino2/panther/CocoaBindings/masterdetail.html
>たとえば、File's Owner が mediaAssets という Media オブジェクトの集合を管理しているとすると
というのは具体的にどういう状態なんでしょう。
配列をどこにどう設定すればFile's Ownerが管理していることになりますか?
- >>607
HMDT に BBS あるだ(略)
- あるNSDataを initWithData でunicode指定でNSStringにして
str = [[NSString alloc] initWithData:dat encoding:NSUTF8StringEncoding];
それをそのままwriteToFileでファイルに書き込むんだけど、できたファイルを開いてみると
Shift JISでエンコードされてるみたい。どこが間違ってるんでしょ?
- >>609
NSStringのwriteToFileは、問題なければdefaultCStringEncodingで書き込む(のかな?)
なので、NSDataのwriteToFileを使う。
str = [[NSString alloc] initWithData:dat encoding:NSUTF8StringEncoding];
としたなら、
[[str dataUsingEncoding:NSUTF8StringEncoding] writeToFile:~~];
とでもすればいいだろう(かな?)
- できますた!即レスありがとう!
- >>275さんと同じ症状が出たんですけどだれか直し方を教えてください
command+ダブルクリックで検索できなくなりました。クラスの階層表示も、からになっています。
NS*の索引が出来てないみたいなんです。
クリーニングや索引の再構築をやってみましたが効果はありません。
前になったときは、プロジェクトを作り直して直ったんだけど、毎回作り直すのは面倒なので...
- Interface Builderを使ってスプリットバーをクロスさせるにはどうすれば良いのでしょうか?
具体的には、下図のように一つのウィンドウに4つのビューがあって、
横のスプリットバーでAB<->CD、縦のスプリットバーでAC<->BDと移動させたいのですが、
A<->C、B<->DのあとAC<->BDとすると、AB<->CDがうまく動かないです。
かといって、ABCDをまとめるとA<->B<->C<->Dのように一列になってしまいます。
分かりにくい説明で申し訳ないです;;
AB
CD
- >>613
2つの SplitView のバーを同期させたいということですよね。
SplitView のデリゲートメソッド splitViewDidResizeSubviews: が使えるはず。
SplitView にはバーの位置を設定するメソッドがないので、バーの位置を同期
させるには対応関係にある SplitView の subview の frame を直接設定した後、
SplitView の再描画を促せばいいと思います。
- 上記の方法でやってみたらできました。
なんかわからないことがあったら聞いて下さい。
- >615
ありがとうございます。まだCocoaに詳しくないので、
勉強しながら試してみることにします。
ところでその方法(A<->C、B<->DのあとAC<->BDとして
A<->C、B<->Dを同期させる方法)だと、縦方向にスプリットバーが1つ、
横方向にスプリットバーが2つになって外観を損ねたりはしないのでしょうか?
- >>616
ええと、こういうのは文章で説明するの難しいですね。
とりあえず、これが完成イメージです。
http://mac.oheya.jp/etc/img-box/img20040311202448.jpg
入れ子になった3つの SplitView があるのでバーは実際には3本
あるわけですが、その内、2本ある水平のバーを同期させることで、
2本のクロスしたバーがあるように見えます。
(1)から(3)は通常の SplitView の動き、
(1)から(2)で2本のバーを同期させています。
外観を損ねるかどうかは画像を見て判断して下さい。
- それから、ここでいう「同期させる」というのは「同時に動かす」という
意味です。splitViewDidResizeSubviews: はバーのドラッグ中、繰り返し
呼ばれるのでこういったことが可能になります。
- オープンソースで公開されているPythonスクリプトをパッケージ内に入れて
CocoaでGUIをつけようと試みています。
ところが、そのスクリプトは複数のファイルで出来てるんですが、ファイル間の階層構造が保た
れていなくてはいけないようなのに、フォルダのままProjectBuilderにドロップ→ビルドすると
その中のファイルが全部フォルダから出されてResourcesに入れられてしまいます。
フォルダの階層構造を保ったままResourcesファイルに入れる方法ってありますか?
- >>619
Target 設定の一番下の辺りに Build Phases ってのがあるだろ。
そこに Copy Files Build Phase を追加すれば、アプリケーションラッパに
コピーするファイルとコピー先のサブパスを設定できる。
Project メニューに New Build Pahase > ってのがあるからそっから
Copy Files Build Phase を選べば追加されるよん。
- >>620
素早いレスありがとうございます。
なるほどなるほど。日本語でいう「ファイルをコピー」というのを追加して
その中に件のファイルを入れてしまえば良い訳ですね。
ありがとう。がんばってみます。
- スクリプトが1つのフォルダにまとまってるなら、そのフォルダ自体を
指定したらいい。そしたらフォルダ内の階層構造もそのまま保存されたはず。
- フォルダのコピーはちゃんと行けたけど、肝心のスクリプトがうまいこと動いてくれない・・
Pythonなんてわかんないし、あきらめました・・。
ちなみに、そのスクリプトはPluckerというやつで、HTMLをPalmで読めるように整形してくれる
スクリプトでした。一応GUI版もあるんだけどあまり日本語のことを考えてくれてないようなので
自分で作ってみようかなーと。
と思いやってみたら、文字だけは変換できるのに画像は出来ないという変な動き・・。
よく調べたらTerminalで動かしても同じ症状が出てました。
なんでだー、元のGUI版と何が違うんだよー・・・ orz
- Cocoa とは直接関係ないんであれなんですが……
画像掲示板に相当する、ソースやプロジェクトを匿名で気軽にアップできる
ような板ってないもんでしょうか。質問するにしてもそれに答えるにしても、
ソースやプロジェクトをやり取りできれば便利だと思うんですが。
というか、俺が知らんだけでそういうものは既にあるのかな……
- >>624
aaacafeあたりを借りれば掲示板とuploader、wikiなどは置ける。
- 画像を拡大・縮小した後、そのサイズで保存するには
どのクラスのお世話になったらいいですか?
NSImageやNSImageRepにsetSizeしても、ファイルに書き出してみると
サイズは元のままなんですが...
- あまり長いソースだと読むのが大変で
気軽に答えられないからじゃないかなあ。
- ソースって追いかけるものなんじゃないかな。
量が多くても全部読むわけじゃなくて、必要なところだけ辿ってくわけで
聞く方は晒せるなら全部晒した方がいいと思う。
全部必要なのか、部分的にあればいいのかは答える方(上級者)が判断することだし。
- >>626
うろ覚えなんで間違ってるかも知れないんですが、
保存したい NSImage を setSize
保存したいサイズの NSImage を新たにもう1つ作り、それに対し
lock focus
setSize した方の NSImage をそこへ draw
unlock focus
こんな感じでいけませんかね。
- >>629
ありがとうございます。ばっちり出来ますた!
元のimageにはsetSizeしなくても、drawInRect:で
新しいほうのimageのサイズを指定すれば大丈夫なようです。
- NSImage や NSImaseRep に対し setSize: しても、それを書き出して
みたらサイズが元のままなのは、これらがメモリ上にロードしたイメージ
データ(NSImageRep が持ってます)をどんなサイズでレンダリングするかを
指定するものだからです。
NSImage はこのサイズにあわせて、ベストな NSImageRep からキャッシュ
イメージを作り、自身の描画を要請された時にはこのキャッシュを使います。
(描画の度に NSImageRep の持ってるデータからサイズ変換してたら効率悪いし)
仮に setSize: で NSImageRep の持ってるイメージデータのサイズを
実際に変換してしまったら、一度サイズを縮小したら最後、縮小に伴って
失われた情報を、もう一度ディスクからファイルをロードし直さない限り
復元することができなくなってしまいます。
そんなわけで、NSImage では setSize: される度に、NSImageRep の
データからキャッシュを作り直しているわけです。(実際には、描画の
要請があってからキャッシュを作り直すみたい)
NSImage とか NSImageRep とかのあたりはほんとにややこしくて、
自分も完全に理解しているとは言い難いのですが、とりあえず。
詳しい人、補足、ダメだしあったらおながいしまつ。
- FinderのようにOutlineViewを使ってファイルリストを表示させるプログラムを
つくっていたのですが、Cocoaでファイル&フォルダの不可視属性を取得することは
できるのでしょうか?
Carbonを使ってみたのですが、一部のフォルダなどには不可視属性がついていないものも
ありったりして、Finderのように表示させることができません。
どなたか、情報をおもちの方がいらっしゃいましたら教えてください。
お願いします。
- スクリーンセーバーモジュールのビルド時に、リンカが以下のような
警告を吐きました。
ld: warning dynamic shared library: /usr/lib/libSystem.dylib not made
a weak library in output with MACOSX_DEPLOYMENT_TARGET environment
variable set to: 10.1
not made a weak library というのは何か重大な問題でしょうか?
ビルド自体は成功し、モジュールも問題なく動作しますが、この警告が
気になって仕方ありません。こちらの環境は
Mac OS X 10.2.8
Developer Tools December 2002 です。
-
ttp://developer.apple.com/ja/qa/qa2001/qa1233.html みれ。
- >>634
ずばりですね。ありがとん! (・∀・)
- って、読んでみたけどこの辺の話はよくわからんす(恥
10.1 でも使えるようにしたいので、QA1223 で示されている回避策2で
いこうと思ったのですが・・・
問題の回避策2
>Mac OS X 10.1 以上を対象にビルドする必要がある場合、または、
>ライブラリ A へのウィークリンクを開始したくない場合は、ライブラリ A の
>シンボルへの実際には使われない余分な参照を 1 つ作成して、リンカに
>ライブラリ A に強くリンクさせることができます。
これって具体的にはどうすることなんでしょうか?
ライブラリ A に相当するものは多分インポートしてるフレームワークのどれか
であり、それらに含まれる関数を無駄に呼んでみるとか、クラスのインスタンスを
無駄に作ってみるとかすればいいのかと思い、いろいろやってみたんですがどうも
違うみたいです・・・
リンカとか共有ライブラリの仕組とか、全然わかってない…… (´・ω・`) トホホ
- >636
%nm /usr/lib/libSystem.dylib
とするといろいろなシンボルが表示されますが、よく見るとただのCの標準ライブラリであることが分かりますね。
ですから、この場合、ライブラリAであるところの、Cの標準ライブラリを直接使ってやればよいことが分かります。
使わなくていいものは別に使わなくてもいいので
if( fclose == NULL ) { fprintf( stderr, "You have no C Lib!!¥n" ) }
// 3つも使っちゃいました! fcloseがなくてfprintfがあるなんてどんなシステムなんだろう(w
とかで十分でしょう。最適化で消えないように気をつける必要がありますが。
警告を無視するのでいいのなら、
>>633
>not made a weak library というのは何か重大な問題でしょうか?
べつに問題ありません。
警告の意味は「ld は弱いリンクを作ろうとしましたが、できませんでした。」
Appleの回避策2は ld に弱いリンクを作ろうとさせない。
ってことですから。
作ろうとしなければ警告は出ませんよね?
- >>637
なるほど。Cの標準ライブラリですか。Foudation や AppKit の関数やクラスで
何をやっても駄目なわけだ。かなりアホなことやってました俺。
ttp://developer.apple.com/ja/technotes/tn2064.html
とかも読んでみたものの余計に混乱してしまいまして _| ̄|○
weak link しようとしたけどできなった、ってことは strong link しました
ってことだから、10.1 でも問題ないですよね、そりゃ。
色々勉強になりました。ありがとう。
- >>632
> 一部のフォルダなどには不可視属性がついていないものも
> ありったりして、Finderのように表示させることができません。
不可視属性がついていないのに表示されないものがある、ということですか?
具体的には何ですかそれは? まさか . で始まるやつとか言うんじゃ……
- >>632
>>639
起動ディスク直下のusrとかtmpとか.hiddenに影響されるもののことでは
ttp://www.tech-arts.co.jp/macosx/macosx-dev-jp/htdocs/2600/2621.html
ttp://www.tech-arts.co.jp/macosx/macosx-dev-jp/htdocs/2600/2624.html
- data = [image TIFFRepresentationUsingCompression:
NSTIFFCompressionNone factor:0.0];
bmRep = [[NSBitmapImageRep alloc] initWithData:data];
とやって image から BitmapImageRep を作った後、ピクセルバッファの
アドレスを得て、そこから直接ピクセルをいじって画像にエフェクトをかける
プログラムを書いています。
32 bit のカラー画像なら、メモリ上で R, G, B, A の順で並んでいて、
plane は 1 つ、という前提でプログラムを書いているのですが、果たして
これは保証されているのでしょうか?
NSBitmapImageRep のドキュメントを見ても、initWithData: でインスタンスを
作った場合に、ビットマップデータがメモリ上でどのような構成になるかといった
ことが一切書かれていないので、ちょっと不安になりまして。
情報、もしくはその在り処を知っている方がいたら教えて下さい。
- >641
詳しい情報はもってないけど、どうしても不安なら、
独自のNSImageRepのサブクラスを作ればいいのでは?
- >>642
レスありがとうございます。
1 pixel 32 bit RGBA 1 plane で正規化された bitmapImageRep を返すような
クラスメソッドでも NSImage にカテゴリとして追加しようかなあと思います。
- いけね。×クラスメソッド ○インスタンスメソッド
-
下記はeventを一つづつ取り出して、そのイベントが何に対する
イベントか判断して実行するか、無視するか決定するルーチンです。
今現在ボタンAなのかスライダーBなのかの判断をイベントが発生した
マウスの座標で行っています。
マウス座標で判定する以外の方法でeventを受け取るコントロールを知る方法はないでしょうか?
ボタンなどのコントロールの数が多くなると、座標判定ルーチンを記述する
のが結構大変です。
もっとスマートな方法をご存知の方は教えていただきたくお願いします。
while(適当にループ){
NSEvent* event = [NSApp nextEventMatchingMask: NSAnyEventMask untilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]
inMode:@"NSDefaultRunLoopMode"
dequeue:YES ];
if([event type] == NSLeftMouseDown){
if(ボタンA の位置でイベントが発生==YES){
[NSApp sendEvent: event];
}else if (スライダーB の位置でイベントが発生==YES){
[NSApp sendEvent: event];
}
}
- >>645
何のためにそれをやってるの??
- >>645
NSView に hitTest: ってのがあるね。
それか、コントロールの一覧を配列か何かに入れておいて、mouse: inRect: あたりで
順番に調べればいいのでは。
てゆうか、なんでそんな変なことがやりたいの?
たぶん目指してるやりかた自体が全然スマートじゃない。
- 一体何のための Application Kit なのかと小一時間……
- Think different.
- ああ、なんか古の WaitNextEvent() を思い出しますなあ……
全然ものにならなかった苦い思い出がっ!
それを思えば随分とラクチンになったもんだ。いいね、Cocoa。
645 は Application Kit が裏で何をやっているか理解するためにあんな
プログラムを書いているに違いない、
と、好意的に解釈してみる。
- CFBundleName, CFBundleDisplayName を設定して自作アプリの
名前を Finder に日本語で表示させるようにしたのですが、Dock では
なぜか英語名になってしまいます。Dock にも日本語で表示させるには
Info.plist に何か別の設定が必要なのでしょうか?
- >>651
Japanese.lproj/InfoPlist.stringsかな
テキストエディットなどを参考にしてください
- CocoaはC++ではなくObject Cって本当ですか?
- >>652
それを参考にして Finder に日本語表示させるところまではきたのですが、
なぜか Dock ではダメなのです。InfoPlist.strings も
CFBundleName = "日本語名";
CFBundleDisplayName = "日本語名";
という感じで、設定に不備はないはずなんですが。
- >>652
それは嘘です。
- まちがえた。
>>653
それは嘘です。
- Object Cってどんな言語ですか?(藁
Objective-Cなら知ってるんだけど。
- >>653
C++というかObjective-C++ならサポートされている。基本はObjective-Cだ。
>>654
本当に設定不備が無いのならキャッシュされているだけかも?
>>657
object Cは存在する。それに“c”と“object”がつく言語はいくつもある。
今回の件には無関係だし、トリビア程度な知識だから知らなくても全然気にするこたぁ、、あるから存分に吊ってくれ。
- Objective-C++っても、C++のクラスをO-Cで継承できない、んだよね?
- >>658
それは Dock がキャッシュしてるっていうことですか?
- >>660
パッケージの中のContentsフォルダを外に出して、入れてみると、どう?
- >>659
できない。
紛らわしいけどC++とObjective-Cを混ぜて書けるだけで
言語的に融合はしていない。
http://homepage.mac.com/mkino2/spec/objectiveC++/objectiveC++.html
- MainMenu.nib の FirstResponder に独自の Target を追加して
新しいメニューを MyDocument あたりで処理するにはどうすればいいのですか?
- >663
tergetを追加する必要はありません。
ClassタブでFirstResponderを選んでactionを追加。
新メニューのアクションをFirstResopnderのactionにつなぐ。
これだけです。
MyDocumentがactionメソッドを持っていて、且つFirstResponderになっていれば
MyDocumentにアクションが飛んできます。
- >664
ありがとうございます。
おかげさまでメニューの追加ができました。
- Safari上に表示された 画像(PNGファイル)をドラッグすると、
(1)画像が半透明になってマウスに追従して動きます。
(2)そのまま、テキストエディットにドロップすると画像がペーストされます。
(3)一方デスクトップ上にドラッグドロップするとABC.pngのようにPNGファイルになって保存されます。
上記(1)(2)(3)を行う機能を実装したいのですが、方法がわかりません。
どなたか御教授いただければ幸いです。
試したこと。
dragPromisedFilesOfTypes:fromRect:source:slideBack:event:を使い、
namesOfPromisedFilesDroppedAtDestinationをオーバライドすることで
(3) が実現できました。しかしドラッグ中に表示されるのは(1)の画像ではなく
PNGアイコンになります。さらに(2)は実現できません。
dragImage:at:offset:event:pasteboard:source:slideBack:を使った場合は、
逆に(1),(2) は正しく行えるのですが、(3)が実現できません。
Safariのように(1)(2)(3)を同時に行う方法があれば教えていただきたくお願いします。
- >>666
ペーストボードにNSFilenamesPboardTypeでフルパス(の配列)を
入れておけばdragImageで(3)も可能。
- 初期型iMac用CPUカード Newer Tech iMAXpowr G3/466MHz/1MB
http://page7.auctions.yahoo.co.jp/jp/auction/g17765890
- >>667
ありがとうございます。
ファイルが存在する場合はそれで良いような気がしますが、
本ケースでは、ファイル自体が存在しないため(アプリーケッション内のデータとして存在する)
当然ながら、NSFilenamesPboardTypeで名前を指定できないのです。
Safariは一旦テンポラリファイルを作っているのだろうか?
- >>669
漏れも同じようなことがあって、調べても分からなかったので
一時ファイルを作る方法で対処したことがある。
- >>669
NSFilesPromisePboardType を使う。
どう使うかは知らん
ぐぐればCocoaはやっぱりのpdfが見つかるだろう
- >>670
ありがとうございます。
>>671
それは当然そうなんだが、、、
ありがとうです。
- 以前FirstResponderについて質問させていただいた者です。
ドキュメントのNSViewないしNSWindowから該当のNSDocumentのポインタを得ることはできないのでしょうか。
できるとしたらFirstResponderをたどる方法なのかな・・この辺ご教授いただけると助かります。
- [[window windowController] document]
- こんにちは。
灰色の透明なウィンドウ(音量設定みたいなウィンドウ)を作ろうとして、
#import "MyWindowController.h"
@implementation MyWindowController
- (void)drawRect:(NSRect)rect
{
[window2 makeKeyAndOrderFront :self];
[[window2 contentView] lockFocus];
NSRect rect = [[window2 contentView] frame/*bounds*/];
[[window2 contentView] unlockFocus];
[window2 flushWindow];
}
@end
としてみたのですが MyWindowController.m:9: unused variable `rect'
ウィンドウ自体を透明にすることはできましたが、このようにでてうまく表示されません。
勉強し始めてまだ四日位なのですが、何か基本的なことを見逃してしまっているのでしょうか。
- >としてみたのですが MyWindowController.m:9: unused variable `rect'
>ウィンドウ自体を透明にすることはできましたが、このようにでてうまく表示されません。
少し変な言い方でした。
上にかぶせる半透明なウィンドウが表示されない、ということなんです。
- 何故そういうコードで半透明になると思ったのか
根拠を教えてほしい。
- 俺も教えて欲しい。
- >>675
これで出来たよ。
#import "stdio.h"
#import <AppKit/AppKit.h>
@implementation hoge
-(id)initWithContentRect:(NSRect)contentRect
styleMask:(unsigned int)aStyle
backing:(NSBackingStoreType)bufferingType
defer:(BOOL)flag {
NSColor *ccol;
ccol=[NSColor colorWithCalibratedRed:1
green:1
blue:1
alpha:0.6];
NSWindow* result = [super initWithContentRect : contentRect
styleMask : NSBorderlessWindowMask
backing : NSBackingStoreBuffered
defer : NO];
//背景にカラーをセット
[result setBackgroundColor : ccol];
[result setLevel : kCGDockWindowLevel]; //Windowの階層レベル(Dock)
[result setAlphaValue : 1]; //透明度をセット
[result setOpaque : NO]; //不透明度
[result setHasShadow : NO]; //影
return result;
}
- >>677-678
始めて四日だっていってるんだからそんなにいじめるなよ。
- >>675
>unused variable `rect
って単に変数rectを使ってないよ~、ってことだと思う。
用意したのに使ってないのは何かのミスかもしれないので
教えてくれるのでしょう。
- >>675
何を読んで勉強しているのか分からんが
とりあえずこれでも見とけ。
http://developer.apple.com/samplecode/RoundTransparentWindow/RoundTransparentWindow.html
- >>679
ありがとう、やってみますね
>>680
ありがとう
>>681
変数rectでぐぐってみます、ありがとう
>>682
ありがとう
まだ何も分からないのでありがとうしか言えません・・・・
もっと勉強して出直します。どうもありがとうございました!
- >683
変数rectじゃなくて C言語がヒットしても良いから 変数 スコープ でググれ。
ていうか、本買え、本。
その状況じゃ3日後には挫折するぞ。
- >684
あまりの馬鹿さ加減に興奮して、上げてしまったではないか。
ていうか ガンガレ !
- >>684
ありがとう、変数 スコープですね。
本なんですが、実はXcode入門を買ってしまいまして、当分は買えないかなぁ・・・と
- やっとできました!
@implementation some
- (void)drawRect:(NSRect)rect
{
[window makeKeyAndOrderFront :self];
[[window contentView] lockFocus];
NSRect rect = [[window2 contentView] frame/*bounds*/];
ここに何を書くかを設定しなきゃいけなかったんですね・・・・
[[window contentView] unlockFocus];
[window flushWindow];
}
やっと気づきました。
根拠を教えてほしい、という言葉が今では身にしみます・・・・・・
もっとCocoaになじめるよう、努力します。
- そういう問題じゃなかろうと思うが。
- NSMutableAttributedStringを使って、一文字の幅を指定してdrawすることは可能でしょうか。
(文字と文字の間を大きくしたり、逆に文字が重なるようにしたいのです)
- >689
see NSTextStorage, NSLyaoutManager, NSTextContainer とか。
http://developer.apple.com/documentation/Cocoa/Conceptual/TextLayout/index.html
とか。
- 文字列を表示したとき、実際にそれが表示されている範囲(Rect)を知るにはどうしたらいいでしょうか。
>>690氏のリンクはまさにその辺りの話だと思うんですが、ぶっちゃけよくわかりません。
- メソッドを関数風に扱う初歩がわかりません……。
List-1(処理内容はサンプル)は正常に動作しますが、同じ動作を期待しつつ、
独立したメソッドで文字列決定を処理させようと思ってList-2のようにすると
コンパイルOKですが実行するとエラーになります。
どこをどうしないといけないんでしょうか。
■ list-1
- (IBAction)myAction1:(id)sender{
NSString*s;
if((random()%10) <= 5) { s = @"AAAA"; } else { s = @"BBBB"; }
[ myOutlet1 setStringValue:s ];
}
■ list-2
- (IBAction)myAction1:(id)sender{
NSString*s;
[ s randomString:5 ];
[ myOutlet1 setStringValue:s ];
}
//
- (NSString *)randomString:(int)iSeparate{
NSString*s;
if((random()%10) <= iSeparate) { s = @"AAAA"; } else { s = @"BBBB"; }
return( s );
}
- >>692
> [ s randomString:5 ];
s = [ self randomString:5 ];
かな。
- >>692
list-2の、
>[ s randomString:5 ];
って、オブジェクトsにメッセージ"randomString"を送出する、って意味。
NSStringでrandomStringメソッドが定義されていないとだめ。
単に、NSStirng *randomString(int) ; の関数を定義するのではダメか?
- (NSString*)randomString: はどのオブジェクトのメソッド?
- >>693
あぁぁぁ
- 文字の最大の縦幅を得る方法を教えてください。
NSFontの属性が多くてよくわからないです。
試しにfontHeight=[font ascender]-[font descender]としても
フォントの種類によってうまくいかないですし・・。
- むりやりだが、@"ABC…xyz"にsizeWithAttributes:を送ってみるのはどうだ?
- >>693
それです!ありがとうございました。
言われてみると今の自分、「selfってなんなんだろ」状態でした・・。
>>694-695
コンパイルエラーにならないように試行錯誤した結果が
[ s randomString:5 ];なのでした(←ひどすぎますね)。
NSStirng *randomString(int iSeparate)
これ↑の場合も試して、同じ内容で動作するのを確認できました。
両方使い分けてもいいのですね。ありがとうございました。
- Objective-CはC++と違って実行時決定で
定義していないメソッドを呼んでもコンパイルエラーにならないから
慣れてないと分かりにくいかも知れない。
そのかわり柔軟なdelegateとか定義できるみたい。
C++でテンプレートを駆使してdelegateやってるのを見ると涙ぐましい。
- NSArrayControllerにプログラムでオブジェクト追加/削除していてしかも、オブザーバーにも
設定しているんですが、削除時に以下のエラーメッセージが実行ログ中に出力されます。なんが悪いんでしょうか?
An instance 0x35e2f0 of class MyClass is being deallocated while key value observers are still registered with it. Break on _NSKVODeallocateLog to start debugging.
追加削除のコードはこんな感じ
- (IBAction)add:(id)sender {
MyClass *anObject = [[[MyClass alloc] init] autorelease];
[self registerForChangeNotification:anObject];
[sourceController addObject:anObject];
}
- (IBAction)remove:(id)sender {
MyClass *anObject = [[sourceController selectedObjects]
objectAtIndex:0];
[self unregisterForChangeNotification:anObject];
[sourceController removeObject:anObject];
}
- (void)unregisterForChangeNotification:(id)anObject
{
[anObject removeObserver:self forKeyPath:@"value"];
}
- (void)registerForChangeNotification:(id)anObject {
[anObject addObserver:self
forKeyPath:@"value" options:NULL context:NULL];
}
こうしているのは、このクラス(MyClassとは違う)でMyClassの各インスタンスが
変更されたときに処理をしたいからなんですけど。unregisterがうまくできていない感じです。
sourceControllerはNSArrayControllerです。
-
> - (IBAction)add:(id)sender {
> MyClass *anObject = [[[MyClass alloc] init] autorelease];
> [self registerForChangeNotification:anObject];
> [sourceController addObject:anObject];
> }
ここで anObject を -autorelease しているが、大丈夫か?
sourceController の addObject: で retain されていればいいのだが、
そうでなければ直近の AutoreleasePool が release されたときにこの
anObject は dealloc されてしまうぞ。
エラーメッセージから察するに、どこかで retainCount の数え間違い
をしていて、既に解放されたオブジェクトを delete しようとしている
感じだ。
ここらへんの問題を解きたいなら素直に ObjectAlloc.app を使うべし。
- >while key value observers are still registered with it
というところから想像すると
anObjectにバインドしているviewオブジェクトがまだあるのに、
勝手にanObjectを解放するな、ということかも。
選択中のオブジェクトを削除するのは
- (void)removeObject:(id)object
ではなくて
- (void)remove:(id)sender
を使うのではないか?
- >701
ObjectAlloc.app使ってみました。よくわかりませんが、オブジェクトは
消したいところで消えますし、そうでないところではちゃんと残っています。
>702
remove:でも同じです。実は、Master-Detail表示にしているのでそれが
悪いのかもしれないんですけど、よくわかりません。
削除ボタンをNSArrayControllerのremove:に直接バインドしたときには
エラー表示はないのですが、別のオブジェクトにもNSArrayControllerの
数が変わったら通知がいくようにしたいので、add/removeともに
別オブジェクト経由にするようにしています。
-
ふと思ったが
> [self unregisterForChangeNotification:anObject];
> [sourceController removeObject:anObject];
これ、逆の順番にしたらどうなる?
- >704
同じでした。アドバイスありがとうございます。
- ユーザがビューをスクロールさせた場合に、それをnotifyさせることはできないのでしょうか?
NSScrollViewにデリゲードがないみたいですので・・。
- 前にMacOSX-DEV-MLにそんな話題があったよう。
結論は忘れたけど、ぐぐれば出てくるんじゃない?
- >> 706
[[NSNotificationCenter defaultCenter] addObserver:observer selector:@selector(frameChange:) name:NSViewFrameDidChangeNotification object:[scrollview contentView]];
でどうさ。
- >707-708
ありがとうございます。
NSViewFrameDidChangeNotificationではなくNSViewBoundsDidChangeNotification
にしたら、上手く動作するっぽいことが分かりました。
- 訂正
(NSClipView *)[scrollview contentView] ×
(NSView*)[scrollview documentView] ○
- >>700
話の本筋からは若干はなれるんだけどさ、
add: remove:の中でノーティフィケーション登録するよりは
MyClassのinit / deallocのタイミングで登録した方がスマートでは?
MyClassがノーティフィケーションを発行するかなにかして。
そうすれば自前のadd: remove:を準備する必要も無いし。
- >>700
>MyClass *anObject = [[sourceController selectedObjects] objectAtIndex:0];
って本当に正解?
今似たようなことやってたら
[[NSArrayController selectedObjects] objectAtIndex:0]
で、NSCFDictionaryが出てきたぞ?
俺の問題かもしれんが
- >[[NSArrayController selectedObjects] objectAtIndex:0]
>で、NSCFDictionaryが出てきたぞ?
NSArrayControllerのObject Class Nameを設定し忘れてただけだった。
逝ってきます・・・
- >711
ありあがとうございます。試してみましたが、うまくゆきません。
An instance 0x3af970 of class MyClass is being deallocated while key value observers are still registered with it. Break on _NSKVODeallocateLog to start debugging.
unregisterするメソッドにNSLogを書くとこのメッセージの後にデバッグメッセージを表示します。
そしてその後、アプリケーションは異常終了SIGSEGV。
ちなみに、(修正前の)上記メッセージが出ているだけではアプリケーションは
何事もなく動作を続けています。
- 一つ質問なのですが、別のウィンドウをクリックしてドキュメントが切り替わったときに、
例えば色を薄くするとかの処理を行いたいときは、どこをいじればよいのでしょうか?
・・下がりまくってるのであげます。
- 色を薄くする対象はウィンドウそのもの?それともウィンドウに載っている部品?
- >714
そもそもregisterとunregisterに問題があるのでは?
registerしてすぐにunregisterしてもちゃんと動く?
>715
NSWindowDidResignKeyNotification
NSWindowDidResignMainNotification
- >717
ありがとうございます。
もちろん、更新処理は呼び出されませんが、同じようにエラーがでました。
そもそもremoveObserverができていないようです。
マニュアル等見直してみます。
- 全く関係ない話だけど、マルチドキュメントのアプリケーションを作っていて
NSDocument を NSNotificationCenter に observer として登録していたんだが、
NSDocument を閉じる時に observer を解除するのを忘れてしまい、
それでアプリケーションが落ちまくって原因が分からずに困った覚えがある。
NSNotificationCenter が既に存在しない observer に通知を投げようとしてたんだな。
- SketchはdeallocでremoveObserverしていたよーな?
- 俺は登録してようがしてまいがdeallocで必ず
[[NSNotificationCenter defaultCenter] removeObserver:self]してる
- NSTextVewなどによる文字単位や単語単位や行単位での文字列操作のメソッドを網羅していきたいのですが、
こういう場合に調べる方法がわからないのでアドバイスかヒントをお願いします。
書籍、Webページ、DevelopTool内のファイル、ヘルプなど、どういった物をどのように活用して
「こういうメソッドがあって、こう使える」と理解していけばいいでしょうか。
- >722
ADCのページ見れば一目瞭然だが。
「Text & Font」 って書いてあるし。
Cocoa だけじゃ全部は出来ないけどさ。
盲点なのは 「Unicode Utilities」かな。
- NSUserDefaultControllerを使ってPreferenceの中のある項目にバインディングしようとしてるんですが
Model Key Pathを items.anItem.title のようにドットで区切ってもdictの中を読んでくれません(itemsとanItemはdict、titleはstringだとして)
prefを保存すると <key>items.anItem.title</key> というようにそのままkeyにされてしまいます。
どのへんが間違っているんでしょうか?
- NSOutlineViewを使ってるのですが、どうもデフォルトでは
ダルブクリックで名前変更するみたいです。
Finderのように時間を置いて2回クリックすると名前変更するようにして、
ダブルクリックではまた違う動作をさせたいのですが、どうすれば良いのでしょうか?
- >>724
Model Key Pathはdictionaryを指定するんじゃなくてdictionaryのkeyを指定するんだ。
>>725
setDoubleAction:でダブルクリックしたときに呼び出すメソッドを指定。
- >>725
ごめん。出来なかった。
- >725
>NSOutlineViewを使ってるのですが、どうもデフォルトでは
>ダルブクリックで名前変更するみたいです。
IBでアウトラインビューのヘッダをダブルクリックしてEditableのチェックを外す。
>Finderのように時間を置いて2回クリックすると名前変更する
自分でなんとかする
選択状態でさらにクリックされたら該当するセルを編集状態にする、ってところか。
セルを編集状態に切り替える方法は知らない。
調べたら教えてくれ。
>ダブルクリックではまた違う動作をさせたい
setDoubleAction:
- >>726
ええと、plistの中に
<key>items</key>
<dict>
<key>anItem</key>
<dict>
<key>title</key>
<string>XXXXXX</string>
</dict>
</dict>
こんな感じに設定が入っていて、UserDefaultController経由で
このXXXXXXにバインディングしたいということなんです。
Controller Keyはデフォで values になっていますから
values.items.anItem.title でXXXXXXが取れるかなと思うんですが...
- >>729
plistをそういう構造にする必要があるのか。
バインディングしたいてことはkeyの名前は決め打ちなんでしょ?
<key>items.anItem.title</key>
<string>XXXXXX</string>
てすれば楽じゃん
- >>723
どうもありがとう。
ADC広過ぎ深過ぎ‥‥とりあえずしばらく悶々と探索します。
- developer.apple.comは検索エンジンにGoogle使ってるから、結構正確で便利。
- ファームウェア(みたいなもの)を作ろうと思っています。
(a)Cocoa Application としてIBを使って組んだプログラム。
(b)Foundation Tool として組んだプログラム。
(a)はダブルクリックで、(b)はターミナルからそれぞれ実行できるものとします。
(a)を起動しっぱなしにして、(a)の内部で必要な時に(b)を呼び出して実行する、
という連動方式を考えているんですけど、
(a)から直接(b)を実行するには‥‥どうすればいいのでしょう?
- >>733
一番簡単なのはsystem()
- 質問です。
appendStringなのですが最初UTF8をエンコーディングに使い、もしnilを返すようだったら
適当なエンコーディングを(MacJapaneseやMacRoman等)推測させたいのですが可能でしょうか。
@implementation NSMutableData (String)
- (void) appendString: (NSString*) value; {
[self appendData: [value dataUsingEncoding: NSUTF8StringEncoding]];
}
@end
- >>733
NSTaskだな。
- 凄く初歩てきな質問だと思うのですが・・・
SafariやCocoMonarの初期設定みたいに、
アイコンをクリックするだけでぐにょ~んとウィンドウが伸びちじみして
それぞれのウィンドウを下に表示するのはどうすればいいのでしょうか?
どうか教えてください!
- NSSizeの定義は
typedef struct _NSSize {
float width;
float height;
} NSSize;
とありますが、例えば以下のようにして、構造体でオブジェクトを
扱うにはどうすればいいのでしょうか?
(以下の定義の仕方は正しいのでしょうか)
typedef struct _MYStruct {
MyObject *obj;
} MYStruct;
- >738
> (ry 構造体でオブジェクトを
> 扱うにはどうすればいいのでしょうか?
なぜそのような奇怪なことがやりたいのでしょう?
- >>738
どうすればいいのでしょうかって、そのまんまじゃないのか?
MyObject * はしょせんはポインタなんだから。
- >>737は相手にされない程(ry
- 奇怪ってこともないと思うけど
それでできるだろ、きっと。
- >> 737, 741
NSWindowの
- (void)setFrame:(NSRect)frameRect display:(BOOL)displayFlag animate:(BOOL)animationFlag
試してないがたぶんこれだろう
- >>734
>>736
有難うございますm(_ _)m。
呼び出して待つだけならSystem()、マルチタスクで動かすならNSTask()という感じでしょうか。
後者はタスク管理の壁がそびえ立ってますが、前者なら手近っぽいのでサンプル作ってみます。
探していたらexecve()というのが自分の求めている答えのような気がしてきました‥‥が、
これも試行錯誤してからですね。
- exec系は正常に実行できた場合帰ってこないので、fork()してからなんだけど、
初心者にはおすすめできないのでsystem()が手っ取り早い。
- ところで、CocoaではSIGCHLDとかSIGPIPEとか、あの辺の
扱いはどうなっているの?
- >>743
ありがとうございます。
- 質問ですが、
メニューやボタンからPanelを表示させるにはどうしたらよいのでしょうか?
- どういう Panel かにもよる。
具体的に書いたらどうか。
- >>749
どういう風に・・・
例えばアバウトダイアログをデフォルトのではなく自作のを表示したり、
普通のパネルを出したりしたいので・・・
- >>750
悪いが一度自分で調べてから来ることを勧める。
- >>745
似た用途の関数にstdlib系とunix系があるんですね。
↓横道にそれます・・・
確認用の単純なサンプルを作ろうと思い、Foundation Toolで自動生成されるソースの、
NSLog(@"Hello, World!");の部分をNSBeep();に置き換えてみると、
エラー Undefined symbols:_NSBeep が出ます。
#import <Cocoa/Cocoa.h>や#import <AppKit/AppKit.h>などを試しても同様です。
何をimportすればいいのか、それとも方法が間違いなのか("Foundation" Toolという
プロジェクト区分が気にかかる……)、よく分かりません。
続け質問ですみませんが、指摘をお願いします。
- >>748
NSApp beginSheet: の指定次第でいろいろできるようです。
- >>748
>>753
おまいら二人ともちゃんと本買って1から勉強汁
- >>752
importとは別に、必要なフレームワークをプロジェクトに登録する必要がある。
/System/Library/Frameworks/Cocoa.frameworkフォルダを
External Frameworks and Librariesのところにドラッグ&ドロップする。
- アクセス規制とけた‥‥
>>754
やっぱそうですね。
>>755
ありがとうございます。frameworkの扱い方の何が自動で何が手動なのか
漠然としていたのですが、助言で視界が開けてきました。
ターミナル無しで実行を確認できるFoundation Toolを(NSBeep()も含め)
数種類作って、Cocoa Applicationからsystem( )で一行コマンドを渡して
それらを実行させてみてみました。問題なしです。
argumentを判別させて結果ファイルを吐き出すところまで動いたので、
あとは結果ファイルをCocoa Application側に読み込ませれば、双方向の
連動ができそうです。
皆様ありがとうございました。m(_ _)m
- Objective-C プログラミング言語 日本語訳。質はどうだ?
http://developer.apple.com/ja/documentation/cocoa/Conceptual/ObjectiveC/index.html
http://developer.apple.com/ja/documentation/japanese.html
- >>757
をぉやっとかぁ。
まぁ、原文と引き当てながら読んでいけば誤訳はなんとかなるって事で。
要するに無いよりマシってことで。
- んじゃやらんぞ。
- てか2003年の9月ってなんでもっと速く晒せないんだよorz
- 原文の日付のままなんじゃねーの?と擁護してみるテスツ。
それよりPDF版がないのはなんでじゃろ。
- 複数ページのHTML=>1ファイルのPDF、の良いソフト無い?
- >>761
英文のもCocoa関係はHTMLオンリーのが増えて来たね。
どうもPDFを晒しておくと自前印刷する奴ばかりで印刷物が売れないとか思ってるのか
オンライン参照しつつコード書けと言いたいのかわからんが。
PDFあると楽だよね。リファレンス系じゃなくてこういう読み物系は特に。
- ムービーの上に線や絵を描いてそれをムービーに書き出すことしたいんです。
ようは、テレビのスポーツ番組で解説者がやっているようなことをCocoaとQuickTimeをつかって
やりたいのだけれど誰か参考になるようなサンプルしりませんか?
- Movie上に絵やテキストを書く
http://developer.apple.com/samplecode/Movie_Overlay/Movie_Overlay.html
NSImageからMovieを作る
http://developer.apple.com/samplecode/CocoaCreateMovie/CocoaCreateMovie.html
- NSって何の略だい?
- NeXTSTEP
- >>767
NEXTSTEPな。
- >>767
「なんばしよっと!」の略
- 野島伸司の略
- ナショナルセミコンダクター
- ナイクロソフト
- なんじゃそりゃ
- なますて
- 質問です.
他のアプリケーションがアクティブで、
そのアクティブなウィンドウの座標やサイズを取得するにはどのようにしたらいいのでしょうか。
ご教授お願いします.
- ななししね の縦読みコピペを表示するプログラムを作ろうしてるんですが、うまいこといきません
#import "Test.h"
@implementation Test
NSMutableString* stringer;
NSMutableArray* nanasisine;
int cnt;
- (IBAction)progress:(id)sender
{
NSString* bun;
NSString* a;
bun=[nanasisine objectAtIndex : cnt];
[stringer appendString : bun ];
[stringer appendString :@"¥n"];
[ writeTexts setStringValue : stringer ];
- cnt ++;
if (cnt==5)
{
[endTexts setEnabled : NO];
a=[[NSBundle mainBundle ]
localizedStringForKey : @"Nanasisine"
value :nil
table : nil ];
[stringer appendString : a];
[writeTexts setStringValue : stringer ];
}
}
- -(void) applicationDidFinishLanching : (NSNotification *) aNotification
{
NSString* a;
cnt = 0;
stringer = [NSMutableString string];
nanasisine = [ NSMutableArray array];
a=[[NSBundle mainBundle ]
localizedStringForKey : @"Naa"
value :nil
table : nil ];
[ nanasisine addObject : a ];
- a=[[NSBundle mainBundle ]
localizedStringForKey : @"Nannka"
value :nil
table : nil ];
[ nanasisine addObject : a ];
a=[[NSBundle mainBundle ]
localizedStringForKey : @"Shindahouga"
value :nil
table : nil ];
[ nanasisine addObject : a ];
a=[[NSBundle mainBundle ]
localizedStringForKey : @"Shinoukana"
value :nil
table : nil ];
[ nanasisine addObject : a ];
a=[[NSBundle mainBundle ]
localizedStringForKey : @"Nee"
value :nil
table : nil ];
[ nanasisine addObject : a ];
}
@end
- /* Test */
#import <Cocoa/Cocoa.h>
@interface Test : NSObject
{
IBOutlet id endTexts;
IBOutlet id writeTexts;
}
- (IBAction)progress:(id)sender;
@end
ちなみに、endTextsはボタンに
writeTextsはテキストフォームにつながってるアウトレットです
progress:はボタンをクリックした時に発動するアクションです
なぜかうまく動きません
- 説明不足でした
>>780がヘッダファイル
>>776->>779がmファイルです
- 2004-05-08 02:38:55.554 Foo[2581] *** Assertion failure in -[NSTextFieldCell _objectValue:forString:], AppKit.subproj/NSCell.m:1079
2004-05-08 02:38:55.563 Foo[2581] Invalid parameter not satisfying: aString != nil
ボタンをクリックするとこんなエラーが出ます
ちなみに
そしてテキストフォームにはなんの変化も起こりません
- >>776
stringerとnanasisineを生成したときにretainしとけ
Objective-C をやり続けたいなら retain release alloc dealloc init~ ファクトリメソッド
をしっかり学べ
- >>783
いまそれを試してみました
[stringer retain];
[nanasisine retain];
をそれぞれ
stringer = [NSMutableString string];
nanasisine = [ NSMutableArray array];
の後に入れてみました
でもやっぱり同じエラーが出ます
- >>784
applicationDidFinishLanchingがちゃんと呼ばれているか確認した?
- >>785
現在解決しました
あなたの発言がズバリでした
呼ばれてませんでした
原因を調べた所
×…-(void) applicationDidFinishLanching : (NSNotification *) aNotification
○…-(void) applicationDidFinishLaunching : (NSNotification *) aNotification
のミスでした
しかし、これってなんでメイクした時にエラーになんなかったんだろう...
- applicationDidFinishLanching
が何かのNotificationから呼ばれるかもしれないから。
- >>786
エラーは出ないけど警告は出てるでしょ?
Obj-Cはダイナミックバインドがあるから、コンパイル時、リンク時に
存在しないメソッドを呼べるのでエラーにできないんだよね。
カテゴリがローダブルバンドル上に存在してるとかあるから。
- Interface builderの話なので板違いかもしれませんが、
すごく初歩なところでつまずいています。
簡単なサンプルを作ろうとしてボタンを配置したのですが、
そこからコネクションを張ろうと思い、コントロールキーを
押しながらドラッグしてもコネクションラインがでません...
本見ながらやってるので、見落としはないと思うのですが何か
設定がいるのでしょうか?
- >>789
Carbon 用の nib を新規に作ったとか。
- Cocoaまったくの初心者です。
簡単なファイルダウンローダーを作ろうと思い、
NSURL *url = [ NSURL URLWithString : [ vUrl stringValue ] ];
NSURLRequest *req = [ NSURLRequest requestWithURL : url ];
NSURLDownload *dl = [ [ NSURLDownload alloc ] initWithRequest : req delegate : self ]
として、みんな自動でやってくれるので凄く便利なのですが、
User-Agentを残さないのも失礼なことと思いまして、
NSMutableURLRequestを使えばUser-Agentを設定できるかと思ったのですが、
サンプルコードもないし、どうにもこうにもなりません。
NSMutableURLRequestの使い方、ご教授願えないでしょうか?
- Cocoaはさっぱり森永♪
- >>790
いやーそれはなかったです。
試しにCocoa-Java Appでもやってみましたが、同じでした。
なんでですかねぇ・・・(鬱
- >>789
昔それあってあせった。
再インストールしたら直った。
- 全然関係ないけどこんなの作った
ttp://www.pandora.nu/tv/src/img20040510035842.sit
NSButton反応わるっ...
糞ゲーと化してしまったw
- NSTableView内のセルを自前で描画しようと、NSTextFieldCellのサブクラスを
作り、-drawInteriorWithFrameを上書きしてみました。
とりあえず望む通りの描画は出来たのですが、こんどはダブルクリックで
編集状態に持っていくことが出来なくなりました。
これを両立させるのってどうやればいいのですか?
NSTextFieldCellのサブクラスにしたのがいけないのでしょうか。
- 誰か・・ヘルプミーあげ。
なお、編集状態に持っていける普通のセルはNSTextFieldCellで間違いないことは
その後の調べでわかりました。
かつ、NSTextFieldCellのサブクラスとして作っただけ(何も実装していない)のセルでも
やはり編集状態に出来ないということもわかりました。
編集状態に入る前に、セルの-setUpFieldEditorAttributesが呼ばれるらしいのですが
自前のセルの場合は、これを実装しても、ここに処理が飛んできてくれませんでした。
わざわざ「フィールドエディタをカスタマイズするならこのメソッドを上書きして」と
書いてあるくらいだから呼ばれるのが普通だろうと思ったのですが..,。
うーん、むずい。
- アホなこと聞くかもしらんけど、setEditable の属性は YES になってる?
- レスありがとうございます。
一応、NSTextFieldCellでなら普通に編集できているコードで、自前のセルに置き換えてるだけ
なので大丈夫かと思いましたが、念のため自前のセルを-isEditableに常にYESを返すように
してみました。
特に変化はありませんでした(T.T)
- サブクラスの isEditable で YES を返すんじゃなくて、
-(void)awakeFromNib{
[[[hogeTableView tableColumnWithIdentifier:@"piyo"] dataCell] setEditable:YES];
}
こんな感じにしてみたらどうなる?
- あれれれ、いけました!!!
サブクラスを作るとデフォルトでeditableがNOにセットされているのでしょうか??
とにかくありがとう!!
- ログ読了。
漏れもぷよ発売に合わせてゲームを作りたい訳だがココアからジョイパッドの入力って読めるのか?
ADCにあるRed_Rocket.sitはカーボンだがやっぱりカーボンから触らないと無理なのか?
- 質問です。
NSMatrixのなかにNSTextFieldCell。そのフィールドに入力が有ったらメソッド(?)を呼びたいのですが、
デリゲートをつかうんですよね?んでこの辺かなと、、、
-(void)textDidBeginEditing:(NSNotification *)notification
- (void)textDidEndEditing:(NSNotification *)notification
なんですが、ぜんぜん呼び出されません。
やったことはといえば
IBでNSMatrixからFile's Ownerに線を引っ張って、Outlet >> delegate
MyObject.mに
-(void)textDidBeginEditing:(NSNotification *)notification
{ NSLog(@"123456""); }
なんか基本的に間違ってますか?
- NSControlTextDidBeginEditingNotification
NSControlTextDidEndEditingNotification
を拾ってくればいいんじゃないか。
- >>803
よくやるポカはインスタンスがないとか
- >803
実はメインの Nib でFile's Owner が NSApplication。
- >>803
NSMatrixにつないでも意味無いんじゃね?
NSTextFieldCellを直接つながないと。
- >>803
NSMatrixをサブクラス化。delegateと同名のメソッドが
定義されているのでオーバーライドしてdelegateに流す
とかすればいいかな?
- NSCellにはdelegateもnotificationも無かった。
適当なこと言ってスマソ。
でもNSMatrixは編集は感知しないんじゃないかなあ?
- >>804-809さん、ありがとです。
でもさっぱり意味が分かりません(笑)
>>804さん
-(void)textDidBeginEditing:(NSNotification *)notification
のかわりに
-(void)NSControlTextDidBeginEditingNotification:(NSNotification *)notification
ってことですか?やってもかわりませんでした。
>>805さん
インスタンスは、NSObjectのサブクラス(MyObject)のインスタンスを一つ作っただけです。
サブクラスはNSObjectのしか作ったこと有りません。っていうかまだ作る意味がわかりません。
>>806さん
Nibは一つしかありません。File's Owner は NSApplicationだとおもいます。だめなの??
>>808さん
NSMatrixをサブクラス化。んで、いろいろつないでみたんですけどさっぱりわかりません。
>>807,809さん
CocoaBrowserでNSMatrixのInstanceMethodsってとこみると-textDidEndEditingってのが
あるんだけどだめなのかな?
>>805,806,808あたりだと思うんだけど、むつかしいです。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
ってのは動いたんだけどな。う~ん。本みてものってないし。
NSMatrixでNSTextFieldCellをたくさん作って、そこに数字をいれてtabKeyを押すと
その数字を評価してくれるってのを作りたいんですけど。
アフォでもわかるように説明もらえないでしょうか?
- >>803
// matrix delegate
- (void)controlTextDidBeginEditing:(NSNotification *)aNotification;
- (void)controlTextDidEndEditing:(NSNotification *)aNotification;
Reference NSControlのDelegate Method Typesをみるよろし
matrixからdelegateにconnectつなげるだけでOk
- >>810
>Nibは一つしかありません。File's Owner は NSApplicationだとおもいます。だめなの??
なんだ、つないでる先が違うよ。
MyObjectをdelegateにしたいのに、NSApplicationをつないでdelegateにしてもダメだろうに。
MyObjectをNSMatrixのdelegateにしないと。
- >>811さん ありがとです。
やってみたけどやっぱりだめです。
NSMatrixのサブクラスのインスタンスは必要なんでしょうか?
NSTextFieldCellになんか書いてtabKey押せば呼び出されるはずなんですよね?
- できた!!!
てんで見当違いのことやってたようでした。
>>812,813さんのいうようにやったらできました。
そうか、そうやってインスタンスってのが増えていくんだな。
ほうほう。なんかうれしいね。
ありがとうでした。
- 一度参考書を通読した方が良さそうな気もするな。
delegate とかの基本的なことは載ってるだろうし。
- ごめんなさい、さらに質問させてください。
自前のセルを描画する時って、強調表示されているかで色を塗り分けないと
いけないですけど、、ハイライト中の2種類の状態、つまり
「ウインドウがアクティブ&コントロールが選択中」と
「ウインドウがデアクティブ&コントロールが選択中」というのは
どうやって見分けるのでしょうか。
とりあえず、isHighlitedで条件分けすれば、選択中かどうかはわかるの
ですが、これではハイライトの2種類の状態を塗り分けることができません。
なにかisHighlited以外の判定メソッドなんかがあるのでしょうか。
- >>816
// cellのサブクラス
-(void)drawWithFrame:(NSRect)rect inView:(NSView *)controlView {
if ([self isHighlighted]) {
NSColor * color = [self highlightColorWithFrame:rect inView: controlView];
}
}
NSTableViewでテスト
ウインドウの状態によってhighlightColorWithFrameが
(NSColor*)alternateSelectedControlColor(active)
(NSColor*)secondarySelectedControlColor(deactive)を切り替えて返しますね。
- >>817
おぉ、ありがとうございます。
質問の内容はシステムカラーをそのまま使う方法なのではなかったのですが
デアクティブのときのカラーがsecondarySelectedControlColorだというのを
教えていただいたおかげで突破できました。
-(void)drawWithFrame:(NSRect)rect inView:(NSView *)controlView {
if ([self isHighlighted]) {
if([self highlightColorWithFrame:rect inView: controlView]==[NSColor secondarySelectedControlColor])
//デアクティブの時の描画
else{
//アクティブの時の描画
}
}
}
こんな感じでいきました。とりあえず動いています。
ありがとう~。
- >>816
817の方だと他のviewにフォーカスが移るとinacitveになるので、windowのactive, inactiveのみで選択色をコントロールしたい場合
if ([self isHighlighted]) {
if ([[controlView window] isKeyWindow]) {
color = [NSColor selectedControlColor]; // active color
} else {
color = [NSColor secondarySelectedControlColor]; // inactive color
} }
の方がいいかな。
- メニューからアクションでアクションメソッドに飛んだ時に
モディファイアキーを押したかどうかをチェックするいい方法は
ないですか?
senderのNSMenuItemもNSMenuもResponderではないのでどうやって
取り出したらいいものか・・・。今はCarbonと混在させてGetKeys()
で取り出すという姑息で感心しない手段を使っています。
- [NSApp currentEvent]から取り出すってのはどうだ?
- NSEvent *event=[NSApp currentEvent];
unsigned int flags=[event modifierFlags];
こんな感じ。
- かぶった……
- たしか[NSApp currentEvent]はメニューバーのトラッキングを
始める前からモディファイアキーを押してないと取れない
IBのTreat as an alternate to the previous itemを利用して
ふたつMenuItemを作って別のactionに繋げれば楽だしメニュー
の表示も動的に変わって素敵(panther必須だっけか)
- >824
うむ。Treat as alternate...はPanther以降だね。
- スクリーンをキャプチャするアプリのソースってどっかにありませんか?
- >>826
HMDTにあるやんけ
僕はNSTaskで/usr/sbin/screencaptureしてるが
- あ、ありました。HMDTに。
失礼しました。
- >>821,822,824
ありがとう。提案された方法で試してみます。
- 試してみた結果です。
NSEventを使う場合、824が書かれたようにメニューをクリックする前に
モディファイアキーを押していないとイベントを取れず、また、押していた
場合でもメニューをプルダウンしている時にモディファイアキーをはずすと
逆にイベントが残ってしまうという問題がありました。難しいですね。
そこで824の提案のTreat as an alternate to the previous itemを
使うことにしました。ありがとうございました。
- 広文社って無くなったの?
http://www.kobunsha.co.jp/ じゃ繋がらないが...
- NSTableView に長い文字列を表示させようとしています。
その際、文字列を "abc...ghi" といった形で省略して表示させたいのですが、
どのようにすれば可能でしょうか。
Finder のリスト表示などは、そのような形の省略を行っているので、
どこかに設定する項目があるとは思うのですが。
- 表示する cell に NSAttributedString を設定することにより解決しました。
お騒がせしました。
- ファビコンってなんですか?
- objectがdeallocされて解放されたことを確認する方法ってありますか?
retainCountはdealloc後では使えませんし、deallocしてもobjectの
ポインタは残骸として残っているのでobjectがnilかどうかでチェック
できません。
今はreleaseでdeallocした後、objectの変数にnilを入れてますけど
他に方法はないのでしょうか?
- >>835
>objectの変数にnilを入れ
それでいいんじゃない。
Objectの実態はCの構造体のポインターだから、インスタンスがなくなったら
存在自体がなくなるわけで、そうするしかないでしょう。
GnuStepならisaが0xdeadfaceになるようだが、Cocoaだと0x357bになるのか?
- >>835
アクセスしてバスエラーが出たら、使われてないよ。きっと
signal()でSEGVトラップしておけば (W
- フ ァ ビ コ ン っ て な ん で す か ?
- >>835
>解放されたことを確認する
ということであればdeallocにNSLog入れるかNotificationを発行するか。
ポインタが指しているオブジェクトが生きているかどうかを見分けるのは無理じゃない?
解放されていたら何をポイントしているのかまったくわからないわけだから。
- >>838
http://www.google.com/
- >>840
死ね
- 0xdeadface
16進数でありながら単語っぽい、すごい発想だなぁ。
- >>836,837,839
やはりnilを代入してチェックするしかないみたいですね。残念。
- Objective-Cでは、「メモリはプログラマ側が管理」という立場なので
別にnil代入にこだわらなくても自分で管理しやすいように設計すれば良い。
ただ、AutoreleasePoolにまかせられない局面が多発するような事態は
設計がダメダメな可能性が大
- >>842
0xdeadbeefのほうが一般的かと
- Objective-CとC++の混合の仕方が分からないです。
以下のファイルを MyClass.h とします。
#import <Carbon/Carbon.h>
class MyClass
{
public:
MyClass();
~MyClass();
};
としまして、MyDocument.m (Objective-C)に
#import "MyClass.h"
と表記してコンパイルしても
error: parse error before "MyClass"
error: syntax error before '{' token
とかいうエラーが出てコンパイルできません。
一体どうすれば良いのでしょうか・・。
- >>846
ソースファイルの拡張子を .mm にする。次が参考になるかもね。
Cocoa_With_Carbon_or_CPP
ttp://developer.apple.com/samplecode/Cocoa_With_Carbon_or_CPP/Cocoa_With_Carbon_or_CPP.html
- Obj-Cアプリの動作速度をなんとか上げたいんだけど、手軽な最適化の道は何かありますか?
たとえば、mkinoさんとこのObj-C最適化のとこに載ってるみたいな、
クラスメソッドでオブジェクトを作らずに、allocとreleaseを使うとか
autoreleaseを使わないとか。そんな感じの。
- Computer Hardware Understanding Development Tools (CHUD Tools).
とかをつかって、遅い原因が何かを調べる。
原因があってそして個々に対策がある。
それがいやならG5 3GHzが出るのをまてば、お手軽に動作速度は向上する。
-
小手先の最適化よりもアルゴリズムの見直しが先決。
以前見たのでは配列の先頭から1個ずつちんたら検索せんでも
バイナリサーチすりゃいいとか、ハッシュテーブル使えとか
アドバイスしたら?はぁなにそれ?とか論外な状況だったことあり。
- お二人さんありがとう。
CHUD、使い方がよくわからん・・。何かで解説が見れないものだろうか。
- >851
ご自身が示したHMDTの訳物の最初の方に書いてる Sampler を使うのが第一歩。
完全なOOP(?)を目指すのか、速度のためにそれを犠牲にするか。
Obj-Cの場合、ダイナミックバインドのおかげでメソッド化せずに、
コピペしまくるほうが格段に速くなったりしますからね。
ある意味コピペ厨最強言語。(w
- >>851
アルゴリズム改良にも、どこが遅いのかを知るのは重要。
Shark上げといて、ターゲット実行中(重い処理中)に、Start=>5秒後=>Stopでサンプリング。
あとは見りゃわかるでしょ。
- NSView に他のNSViewをsubViewとして追加。
どんどん追加するから、追加でオーバーする分を
superViewをsetFrameSizeでサイズ変更ってやると
サイズ変更で増えた分の領域になにも表示されなくなるのよね。
再描画のタイミングを何回も見直したんで、その問題じゃないと思うんだけど。
リサイズしないで、superViewのサイズを2000とかにしておくと
追加されたViewは問題なく表示されるので、追加する部分の問題でもないと思う。
順番的には、
追加後のsuperViewのサイズを先に計算
superViewをリサイズ
subViewを追加
ってやってます。
誰かなにかアドバイスください。
- Object-Cでトリップ検索ソフトが作れますか?
と聞いてみる。でもやっぱりC++とかじゃないと無理なのかな?
- >>854
全然分からないが、
-(void)setNeedsDisplay:(BOOL)flag;
を YES にするとかは?
>>855
作れるだろうが、既に存在するものを改めて作ってもなあ……
- >>856
あれ?Mac用ソフトはターミナル経由のtripperX以外にあったっけ?
- >>857
まさに tripperx のことなんだが。
- >>858
いや、それはCUIでしょ?
GUIインターフェイスのやつはまだ開発されてないんでしょ?
- >>859
たかがトリップを検索するのに GUI が必要なのかという気もするが。
まあ、需要があると思うなら作ってみれば?
- >859
Xgridでおながいします。
- 老婆心ながら、、
べつにC++で普通に開発できますよ。
正確にはC++じゃなくてObjective-C++なんだけど。
まあ、win板で「Cで開発って可能ですか?」と言っている奴もいるしなあ。
- NSEditor準拠のサンプルってないですか?
具体的には自作のNSControlで値を編集する時
準拠するにはどうしたらいいのかわからないんですが
- といいますか、NSEditorの
commitEditing
objectDidEndEditing:
discardEditing
objectDidBeginEditing:
の四つのメソッドの使うタイミングが掴めないんです。
- >859
ASSで皮でも被せとけ。
- NSFontをNSImageやCGContextに描画したりするサンプルってありませんか?
DevTools付属のサンプルSketchは見てみたんですが、
NSImageやCGContextを経由しているようには見えませんでした。
文字を書いたOpenGLのテクスチャを作ろうと思ってます。
- >>866
NSViewのサブクラス
- (void)drawRect:(NSRect)rect {
NSRect imagerect = {0, 0, 128, 128};
NSImage * image;
NSFont * font = [NSFont systemFontOfSize: 14];
NSDictionary * fontdic = [NSMutableDictionary dictionaryWithObjectsAndKeys: font,
NSFontAttributeName, [NSColor blackColor], NSForegroundColorAttributeName, nil];
image = [[NSImage allocWithZone:nil] init];
[image setSize: imagerect.size];
[image lockFocus];
[[NSColor blueColor] set];
[@"Draw String" drawAtPoint: NSMakePoint(0, 0) withAttributes: fontdic];
[image unlockFocus];
[image drawAtPoint:NSZeroPoint fromRect: imagerect operation:NSCompositeSourceOver fraction:1.0f];
}
NSView&OpenGL関連だがこれ読んでおくといいかも
ttp://developer.apple.com/ja/qa/qa2001/qa1325.html
ttp://developer.apple.com/qa/qa2001/qa1325.html
- その文書は一度目を通したのですが、不可視にしたViewをテクスチャにすることが
できないみたいだったのでスルーしていました。
今回、僕がわからなかったのは、
NSImageにlockFocusすることで描画開始できるってことだったみたいです。
とても参考になりました。ありがとうございます。
- 誰かNSTypeSetterで縦書きする方法知りませんかー?
- できない
- >>869
俺も知りたい。
http://www.tech-arts.co.jp/macosx/macosx-dev-jp/htdocs/600/644.html
のWWDCのセッションというのはどうなったんだろう?
いまだにNDAなのかな?
- >>871
Pantherではアラビア文字(右から左)はサポートされたけど、縦書きはまだの様ですが。
- >>872
早くできるようになると良いね。
漏れは描画させた後編集の必要が無いので自分で強引1文字つづ描画しました。
ATUIでは確かに実現できるらしいが、サンプル見て挫折。
- >>873
さすがにTigerでは縦書きも実装されると思いますが。
>漏れは描画させた後編集の必要が無いので自分で強引1文字つづ描画しました。
この場合、縦書き用のグリフまたはCIDはどうやって取得するのでしょうか?
- >>874
>>873さんではないんですが、多分
-drawGlyphsForRange:(NSRange)range atPoint:(NSPoint)point @ NSLayoutManager
でrange=NSMakeRange( location, 1 )で一文字づつ書ける。
グリフのIDはわざわざ取得しなくてもいいかも知れないです。
ただ、これで縦書きすると、一文字分グリフの位置がずれてしまうという面倒が在り、
さらに、縦書きエディタを作ろうとすると、ATOK、或いはプラットフォームの
漢字かな変換サーバーをトラップする時に、NSTextViewのmarkedTextの位置に下線(縦書きだと横線)を
引いたりする処理がやたら面倒。
アップルがNSLayoutManager、NSTextContainerのNSLineSweepDirectionのNSLineSweepDownを
早くサポートしてくれればいいんですが。
- >>875
確かに一文字毎に描画できますが、これでは横書き用のグリフを表示してしまい約物とか平仮名カタカナ等縦と横で字形が違う文字で問題になります。
そこである文字コードに対応する縦書き用字形のグリフIDが欲しくなりますが、Cocoaではその方法が提供されていない様ですので諦めていました。誰かご存じないですか?
やっぱりATSUIを直接触らないとダメなんでしょうかね。
- >>876
今こそこそ仕事の後ドキュメントプリントしながら勉強してまつ。
CocoaからMacプログラムはじめたのでCarbonはさぱーり。
今日は眠いんで寝ますがCocoaからもCarbon呼べるみたいなので、
やり方分かったら書き込みます。
- はじめてのネットワークプログラミングに挑戦しています。
socketからNSFileHandleを取得して、そこに -writeDataしてるのですが、送信途中で
相手から接続が切られた場合、SIGPIPEが発生して強制終了させられてしまいます。
ググって見たところ、このSIGPIPEは無視するのが一般的だそうですが、writeDataの時の
SIGPIPEを無視する方法が分かりません。
NSFileHandleは諦めて、send()でMSG_NOSIGNALを指定すれば無視できるらしいと知り
やってみましたが、MSG_NOSIGNALがOSXでは使えないようでコンパイルが通りませんでした。
これってどう解決したら良いのでしょうか?
- >>878
失礼な質問かもしれませんけど、
signal()関数にSIGPIPE用のハンドラ指定してます?
#include<signal.h>
#include<errno.h>
extern int errno;
void sigpipeHandler( int signo )
{
return; // 無視
}
int main(void) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
errno = 0;
if( signal( SIGPIPE, sigpipeHandler ) == SIG_ERR )
{
if( errno != 0 )
printf("Error: %s\n", strerror(errno) );
else
printf("Unknown error\n");
}
// TODO
これでとりあえずは無視されると思います。
NSFileHandleが-writeData:でサブプロセス、又はサブスレッドを作成しててもその作成前に
シグナルハンドラを指定してやれば、それがそのまま受け継がれるはず。
シグナル関係はピアソンの詳解UNIXプログラミングの10章を参考にするといいはずです。
つかFoundation Kit、シグナル処理用のメソッドを
Target-Selectorの指定でレジスタできると便利と思うんだけど。
@protocol NSSignalHandlerまだー?
- ttp://www.bignerdranch.com/classes/instructors.shtml#ahillegass
ヒレガスたん、めちゃくちゃ男前だねw
- どこの冒険家だよ
- >>879
ありがとうございます。無事、無視してくれるようになりました。
それでもデバッグ中たまにSIGPIPEで落ちるのだけど、これは私がシグナル関係を全く知らない
ためにきっと変な扱いをしてるのでしょう。
ネットワークプログラミングも、やってみれば何とかなるものですね。
やる前はもっと敷居が高いかと思ってました。NSFileHandleのおかげでもあるけど。
あと、おすすめの本(本、ですよね?)はぜひ買って読んでみます。
- >>880
カッケー、ヒレガスたん。こんなヒゲが似合う男になりたい。
詳解UNIXプログラミングほしいけど高いよ………
- >>883
名前を言えないアノ本を考えたら安いもんだよ。
- >>882
どういたしまして。詳解UNIXは本ですよ。
http://www.pearsoned.co.jp/washo/unix/wa_uni12-j.html
>>880
スティールボールランに出てる人ですか?
- >>876
縦書き用のグリフじゃないかもだけど、NSGlyphのグリフIDなら、
NSFontの内部メソッド_defaultGlyphForChar:で入手できるみたいでつ。
パブリッククラスなら、
#include<objc/objc-class.h>でずるして、
void *iterator = NULL;
struct objc_method_list *m_list = NULL;
int i;
while( ( m_list = class_nextMethodList( theClass, &iterator ) ) != NULL ) {
for( i = 0; i < m_list->method_count; i++ ) {
struct objc_method method = m_list->method_list[i];
SEL method_sel = method.method_name;
NSLog(@"%@\n", NSStringFromSelector(sel) );
}
}
で内部メソッドも入手できるっぽい。
ただ、これだとグリフの描画はNSBezierPathを使うことになるはず。
CocoaPrograming.netのサンプルの14章のTextRenderingを参照してください。
本もってなくてもサンプルはダウンロードできます。
- >>886
レスありがとうございます。Cocoa Programingは私も持っているのですが必要に応じて拾い読みしかしていないので、この部分はあまり読んでいませんでした。
そこでじっくり読んでみましたが、残念ながら_defaultGlyphForCharでは縦書き用グリフは無理みたいですね。指定できないですから。
ちなみに現在グリフIDとそれの描画はNSLayoutManagerの以下のmethodを使っています。
- (NSGlyph)glyphAtIndex:(unsigned)glyphIndex;
- (void)showPackedGlyphs:(char *)glyphs length:(unsigned)glyphLen glyphRange:(NSRange)glyphRange atPoint:(NSPoint)point font:(NSFont *)font color:(NSColor *)color printingAdjustment:(NSSize)printingAdjustment;
Cocoaでこの問題をクリアにコーディングするにはNSGlyphStorageのlayoutOptionsに縦書きが追加される事が必要なのかなと考えておりまして、Tigerに期待している状態です。
Tigerのリリースが遅いようならATSUIを勉強しようかな。
- すいません、NSDataを-dataWithContentsOfMappedFileとか-dataWithContentsOfFile
で作ろうと思ったのですが、2G以上のデータは作れないとかの制限があったりしますか?
どちらのメソッドも2G以上のファイルを指定するとnilしか返ってこないみたいなのですけど・・・。
こんなもの?
- おっと、この場合メソッドの前の記号は+ですね。まあたいした事ではないけど・・。
- >>888
http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ObjC_classic/Classes/NSData.html#//apple_ref/doc/uid/20000172/CIAEAJGI
に
>An NSData object stores immutable data in the form of bytes.
>The size of the data is subject to a 2GB limit.
って書いてあった。
- うげ、リファレンスは見たつもりだったんだけど見落としてたか・・・。
ありがとうございました。
さて、どうしようかな。CFDataでも作ればいけるのだろうか。
がんばって調べてみます。
- >>891
サンプルあった。6GBオッケー。
http://developer.apple.com/samplecode/MapLargeFile/MapLargeFile.html
ただ、これUnixのシステムコールのmmap呼んでるだけなので、
void*型のバッファから、ファクトリメソッドでNSDataやCFData作ろうとしてもエラーになるかもしんない。
いまソースコンパイルできる状況に無いんであとはわかんないでつ。
NSDataのデータの限界量はリソースリミットいじっても変わんないんだろうか?
- すいません
質問させて下さい
テーブルビューに表示させたテキストを
ダブルクリックで選択して、テキスト内容を変更したいのですが
どうすれば良いのでしょうか?
- >>893
1. TableView の dataCell の isEditable を YES にする。
2. -(void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex; を TableView の dataSource に実装する。
- >>894
できましたーー!
ありがとうございました
- 最近Cocoaを始めたものです
いきなりつまずいたので少し質問させてください...
コード打ち込み終わりビルドすると、
Linking/Users/×××/test/build/test.app/Content/MacOS/test(1個のエラー)
can't locate file for:-Icrt1.o
とでてコンパイルできません(泣
(×××はユーザー名、testはアプリ名です)
そんなファイル探してもないし...
だれか解決法しっていたらおしえてくださひ...
- パスの一部に日本語が入っているとダメとかいうバグが昔あったが・・・
プロジェクトの位置を変えてみるとかしてみては?
見当違いだったらすまぬ。
- >896
打ち込んだコードを晒せ。
- >>897
全部英語にかえても駄目でした...
>>898
どんなコードでもエラーが出るんです(汗
極端な話、雛形をコンパイルしてもでます...
環境がおかしいんでしょうか?
- >>899
環境がおかしい
- NSViewにfinderからDragされたfileのfilePathを知るには
どうしたらいいんでしょうか。
- [ pBoard propertyListForType: NSFilenamesPboardType ];
でできたわ。
調べるのに一苦労。みんなどうやって調べてるの?
- Google なんぞでヒントとなるキーワードを検索してからフレームワーク内で検索。
あるいは、その逆。
- ありがとうございます。
困ってる本人が見つけられなかったものを見つけてしまうなんてすごいすね。
おそらく現在NSDataを使ってるメソッドは、unixのシステムコールで代用が利くと思うので
なんとかいけそうな感じです。
あと、知ってる人がいたら自分のIPアドレスを調べる方法を教えてくれるとうれしいです。
SystemConfiguration.frameworkの方でシステム環境設定のネットワークの「IPアドレス」欄に
直に書いてあるアドレスは読めそうなのですが、DHCPで割り当てられたアドレスの取得方法が
わからないです。(SystemConfigurationではDHCPで取得する、ということしか書いてない?)
- NSHost あたりかな。
- >>905
即レスサンクスです!
NSHost *host = [NSHost currentHost];
NSArray *adressArray = [host addresses];
で、無事いけました。こんなに簡単だったとは・・(汗)
- >>896>>899
-Icrt1.oじゃなくて-lcrt1.oだろうけど、それ、OSはプリインスコ? だったらOSをCDから
入れ直せば(復元じゃなくて)直るかも。それか10.3ならXcode 1.2を入れれば直るかも。
あるはずの/usr/lib/crt1.oが無いってことだと思うんだけど。
- 質問ばかりでごめん。後に貢献するから許して。
Cocoaで、NSImageからJPEGのデータを作成するには、
[[ NSBitmapImageRep alloc] initWithData : [anImage TIFFRepresentation]]とかして、TIFF
に変換したあと、[ imageRep representationUsingType:NSJPEGFileType properties:dictionary]
などとしないといけないようですが、ここで作ったImageRepがいつまでたっても解放されて
くれないようです。
メモリリークにもなってないみたいなのに、画像を一枚変換するごとに5MBづつアプリケーション
の使用メモリが増えていく・・・。なんとかなりませぬか。
周辺コードはこんな感じです。
image = [[NSImage alloc] initWithContentsOfFile:anPath];
imageRep =[[ NSBitmapImageRep alloc] initWithData : [image TIFFRepresentation]];
[image release];
[ imageRep setAlpha:NO];
returnData =[ imageRep representationUsingType:NSJPEGFileType properties:dictionary];
[imageRep release];
- 補足&自己レス
今検証していて気づいたのですが、いつまでたっても解放されないというのは正確ではなく
そのアプリケーションをアクティブにしたら200MBのメモリが一気に解放されました。
いままでtopで監視してただけなので気づきませんでした。
でも、サーバーとして作っているのでアクティブにしないと解放されないのでは困ってしまいます。
強制的にリフレッシュ(?)するような方法ってあるのでしょうか。
- >>909
想像で済まないが、
returnDataが AutoreleasePoolに入っていて、Eventが来た(アクティブ)時に解放されている
かな?
これが当たりなら、次のどちらかをやってみる
1.returnDataがループにあるんなら、ループ内でローカルなAutoreleasePoolでかこってみる。
2..returnDataがAutoreleasePoolに入らないように実装する。
- おぉっ、すばらしい!ありがとう!
今回は1で解決しました。
returnDataは直後でそのまま返り値として使われているのですが、その戻っていった先のメソッド
の中を局所的な自動解放プールでかこってやればすぐに解放されるようになりました。
うーん、Cocoaは奥が深い。
- >>907
わかりました
入れ直してみます。
- ツールバーにNSPopUpButtonを入れようと思いまして、
NSToolbarItem* toolbarItem;
toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier:itemId] autorelease];
NSPopUpButton *button = [[NSPopUpButton alloc] init];
[[button cell] setControlSize:NSMiniControlSize];
[button addItemWithTitle:@"Item1"];
[button addItemWithTitle:@"Item2"];
[toolbarItem setView:button];
みたいな感じにしたのですが、これだと文字の大きさが大きいままなのです。
文字も周りに合わせて小さくするにはどうすればいいのでしょうか?
また、選択が変更された場合にメッセージを送るにはどうすればいいのでしょうか?
- >>913
やった事無いですがfontのサイズを落とす必要があるのでは。私はPopUpButtonをIBで用意したので簡単にMiniサイズに変更できました。
>選択が変更された場合にメッセージを送るにはどうすればいいのでしょうか?
Action methodを用意してsetAction:,setTarget:で設定すればOKかと。
- スクロールビューにカスタムビューを組み込ませて、独自のエディタを
作っているのですが、カスタムビューがスクロールビューのコンテンツ
よりも小さい時、余白の部分がグレーで表示されるのですが、このグレー
を変更させる方法はありませんか?
貼付けたカスタムビューもdrawRect:内でEraseRect()で消去しないと
グレーのままです。毎回EraseRect()を呼び出すのもみっともない・・・
- NSDistributedNotificationCenterの4つの定数の意味が全然分かんない...
エロい人説明して...
- あ”あああぁぁぁっ
NSDistributedNotificationCenterのNSNotificationSuspensionBehaviorの4つの定数の意味が全然分かんない...
エロい人説明して...
- ここの住人、今頃はWWDCか?
- >>918
いえ、早めの夏休みで鹿児島の実家です。
- (フォーカス固定済み)
NSString *s = @"test";
[s drawAtPoint:NSMakePoint(0,0) withAttributes:nil];
こんな感じで文字列は描画できるわけだが、
これだと、左の点から右に文字列が描画されていくよね。
それで、質問なのですが、
「指定した点を中央として、文字列を中央寄せで描画するには
どうしたらいいだろうか?」
もしくは、
「文字列の描画するときの、文字列全体のピクセル幅の求め方」
分かる人お願いします。m(_ _)m
- >>920
>文字列を中央寄せで描画する
指定した点.x -= 描写したい文字列のwidth / 2;
>「文字列の描画するときの、文字列全体のピクセル幅の求め方」
単一フォントなら
width = [nsfont widthOfString: 描写したい文字列];
使ったことないけどNSAttributedStringなら
-(NSSize)[NSAttributedString Additions size];
-(NSSize)[NSString Additions sizeWithAttributes:(NSDictionary *)attributes];
ですかね。
- >>920
drawAtPoint:withAttributes: ではなく、
drawInRect:withAttributes: を使ったらどうだろうか。
1. 指定した点が中央になるように Rect を配置する
2. Attributes の属性として中央寄せの NSParagraphStyle を与える
てな感じで可能だと思うが。
- >>921,922
さんくす!
さっそく試してみます!
ありがとうございました。
- >>920
「文字列の描画するときの、文字列全体のピクセル幅の求め方」
は[s sizeWithAttributes:nil]でどうでしょう?
これで良ければ
「指定した点を中央として、文字列を中央寄せで描画」
も出来るはず。
- 便乗質問させてもらってよいでしょうか。
drawInRect...で文字列を表示するときに、システムの設定に関わらず
アンチエイリアスを切る方法はどうやればいいのでしょう。
図形を描画するときにはNSGraphicContetxtでアンチエイリアスを切
れるようですがこの場合は効果ありませんでした。
- FIleOwnerのCustomClassの一覧で出てくる
SCNibObjectInfo
ってなんですかね。
検索しても一件もヒットせず。
- >>924
>「文字列の描画するときの、文字列全体のピクセル幅の求め方」
ここにいる懸命なプログラマの人にはわかっていると思うけど、
もちろん「ピクセル幅」はそれでは求められないですね。
- >>920
-(NSSize)[NSAttributedString Additions size]; × 互換維持用ってドキュメントにあった。
-(NSSize)[NSString(Additions) sizeWithAttributes:(NSDictionary *)attributes]; ○
ノイズ スマソ
- 度重なるスレ汚しスマソ
[nsfont widthOfString: 描写したい文字列]; × 互換維持用ってドキュメントにあった
> -(NSSize)[NSAttributedString Additions size]; × 互換維持用ってドキュメントにあった。
これはなかったことに ...
- >>927
そうですか・・・。では正しい方法を教えてください。
- >>927自身が「懸命」だから、わかってないってことなんだよ。「賢明」じゃないしw
- >>925
文字列のアンチエイリアスはNSGraphicsContextで切れますよ。
↓こんな感じでどうでしょう?
- (IBAction)test:(id)sender
{
NSGraphicsContext *gc = [NSGraphicsContext currentContext];
NSString *s = @"test";
[self lockFocus];
[gc setShouldAntialias:NO];
[s drawInRect:NSMakeRect(0,0,200,200)
withAttributes:[NSDictionary dictionaryWithObject:[NSFont fontWithName:@"Helvetica" size:50]
forKey:NSFontAttributeName]];
[self unlockFocus];
}
- >>932
あれ、これでいけましたか?
こちらではうまくいかないのですが・・・。
違いと言えば、こちらではNSImageをallocして、それにlockFocusして、setShouldAntialias
してから文字列を描画していることくらいだと思うのですが、うまくいきません。
もうすこし調べてみます。ありがとう。
- こちらではうまくいっています。
補足ですが
上のメソッドはNSViewを継承したクラスに記述したものです。
したがって,lockFocusはNSViewのものが呼び出されています。一番の違いはここのような気がします。
- >>933
NSImage を lockFocus した"あとに" カレントグラフィクスコンテクスト を取得しましょう。
NSGraphicsContext の currentContext メソッドは現在フォーカスを持つグラフィクスコンテクストを取得します。
- おお、いけました。勉強になります。
>currentContext メソッドは現在フォーカスを持つグラフィクスコンテクストを取得します
なるほど、そういわれれば納得。
いろいろありがとうございました。>>932,935
- すいません。質問させてくだい。
アウトラインビューで指定したアイテムを選択させたいのですが、
どうもうまくいきません。
テーブルビューでは行の番号で指定して選択できたのですが、
アウトラインだとその方法ではできませんでした。
助言お願いいたします。
- gif2png2.5.1がCarbon/Cocoaで使えたら…と先刻ソースコードを
落としてきたものの、解凍して出来たソレは何をどうしたらいいの
かゼロから勉強せねば訳の分からぬ世界でした。
こちらのスレを参考に、頑張ってコンパイルまでたどり着けるよう
頑張ります。
- 頑張って~たどりつけるよう勉強します orz
まずはオライリーのCocoa本を探しに行かねば。
- >>938
gif -> pngって普通にCocoaで出来るよね。
なんで必要なの?
- >940
恥ずかしながらそういった事さえ分かっておりませんでした(Xcodeで
Cocoaアプリケーションを自分でも作れるらしい、程度の考え方でした)。
現在Photoshop Elementsの「Web書き出し..」.で作成したGIFファイルを
PIXTURE STUDIOにて配付されているgif2png 2.3.2でPNGに変換する方法
をとっている(二度手間ですが、不要なヘッダの取捨選択やガンマ値チャ
ンクを書き込めたりWeb書き出しのPNG保存より小さく保存できるため)の
ですが、この工程をgif2pngそのものをCocoaアプリにする事でAppleScript
なりアクションで制御出来ないだろうかと思ったのです。
- >>941
>ですが、この工程をgif2pngそのものをCocoaアプリにする事でAppleScript
gif2pngがシェルのコマンドなら、そのままAppleScriptから
呼び出しできますよ。多分。
http://developer.apple.com/ja/technotes/tn2065.html
画像の合成とか必要なら、
http://www.google.com/search?q=imageMagick&num=100&hl=ja&ie=UTF-8&lr=lang_ja&sa=X&oi=lrtip7
ImageMagickなんてどうでしょう。
AとBの画像を合成して、tif書き出しなんかを行った事あります。
ただ少し遅かったですけど。
あと依存するライブラリがヤヤコシカッタような・・・。
cocoaな話であれば、合成/加工からファイルの生成までの
一連の自動化を行うアプリを作るのなんて面白いかも。
- Pixadexなどのアイコン管理ソフトやiPhotoのように
ScrollVIew内のViewに画像を多数表示させたいんですが
いいサンプルか書籍はありますか?
自分でも挑戦してみたんですがスクロールさせると描画が乱れてしまいます。
- >>943
固定サイズのサブビューをぺたぺた貼っていくのがはやいかもしんない。
変な例だけどDeveloper/Sample/AppKitについてるテキストエディットのMultiplePagesViewあたりを
参考にするとよいのでは。
- NSImageCellを使えばええんでないの?
- 本格的にプログラミングをはじめようと、本のサンプルを参考に
自分なりのメソッドを作って拡張したのですが、
一つの.m、.hファイルに付け足していったので、ソースコードが長くて不便です。
機能ごとにソースファイルを分割したいのですが、まずはじめに
何をすればよいかよくわかりません。
レベル的にもCをちょっとかじった程度です。
自学したいので参考となるURLや書籍、サンプルコードはないでしょうか…
- >>946
入門書を読んで勉強するしかないけど、.m, .hで分けるということなら
クラス毎にファイルに分ければいい。Objective-Cで書いてるなら。
入門書はいくつも買わないでとりあえず一つだけ買って攻略する。
あとは慣れ。実践で憶えていくしかない。Cocoaならヒレガス本がお薦め。
HappyMacintoshDevelopingTimeがいいという人もいるけど、あれはちょっと
初心者には向いてないと思う。初心者が読む部分の説明が良くない。
- >>946
>機能ごとにソースファイルを分割したい
カテゴリだな。
荻原本読んどけ。
初めは少々難しいが、あとになって必ず役に立つ。
- >>947
>クラス毎にファイルに分ければいい。Objective-Cで書いてるなら。
分割したいクラスの部分を既存のソースファイルから切り取って
xxx.h、xxx.mに保存してビルドすれば良いということですか?
分割したファイルと分割元ファイルをimportなりなんなりで
クラス同士の関連付けする必要はないのでしょうか?
>あとは慣れ。実践で憶えていくしかない。Cocoaならヒレガス本がお薦め。
ヒレガス本探してきますλ....
- >>948
カテゴリって言うんですね…
検索キーがわからなくて難儀してました。
調べてみます。
>>947-948
色々ありがとうございます(TдT)
- http://www.big.or.jp/%7Ecrane/cocoa/
↑
ここ見ながらやってるのですが、
MainMenu.nibって奴をダブルクリックしても
インフォパネルってのがデフォールトで開かな
いんですけど、どうやって開くのでしょうか?
- メニューバーを探せ。サブメニューじゃないからすぐ見つかる。
- あ、なんとなく出来た。。
習うより慣れろって感じっすね。<InterfaceBuilder
- ついでに
Carbon もさっぱり!!!
- >>954
漏れなんかCarbonはきっぱりってつもりだったんだが(w
肝心な所でCarbonでてくるしよぉ(鬱
- 一つのアプリで2つのウィンドウを生成して、それぞれにImageViewとOpenGLViewを
表示させたいけど起動中に落ちてしまう…
インターフェースビルダーで、windowのインスタンスを2つ作るだけじゃダメなんですかね…
- >>956
コンソール -> ログ -> ~Library/Logs -> CrashReporter
で落ちた原因を確認しる。
- 書いてある通りにやってもできない事が大杉のHMDTの本だが、
初心者の自分も躓いた点を書いとく
p282のパネルにボタンを格子状に配置する際、オプションキーを押しながらドラッグ
となってるが正しくは、オプションキーを押しながらオブジェクト(ボタン)のリサイズハンドルを
ドラッグだった…
オプションキーを押しながらオブジェクトをドラッグしてもオブジェクトが
コピーされるだけで2時間ぐらい悩まされた(-ωー)
Interface Builderのヘルプを検索してようやく気づく…
新しいのは良くなってるんかねえ…
- >>958
追加以外のとこも書き直されてるみたいだよ。
- (クリックしている絵)
- いまテキストエディタ書いてるんですけど、
DiskArbitrationRegister failed: 1102
ていうエラーメッセージが必ず出てしまいます。その後問題なく起動します。
AppleのサイトではCarbonのTipsにしか載ってないんですけど、どなたかこのエラーが
何なのか御存知の方いませんか?
NSTextViewをサブクラス化してるくらいで、別に変わったことはしてないですけど。
- 300dpiのimageに下記のように文字を描画すると、
[image lockFocus];
[str drawAtPoint:point withAttributes:dicAttr];
[image unlockFocus];
できたimageの解像度は72dpiになっています。
解像度を落とさずに文字を描画したいんですが、どのように
したら良いのでしょうか。ご存知のかたお教え下さい。
- dpi というものについて今一度考えた方が良いんじゃないか。
- >>962
>解像度を落とさずに文字を描画
自分も同じ悩み持ちです。
読み込んだイメージの解像度を72dpiに変換すると同時に、
倍率を計算して、drawAtPointする時にNSAffineTransform
で倍率指定ってのが回避策か?と妄想中。
>>963
ぜひ、解像度が絡んだ場合の解決方法を教えてくださいまし。
- >>962 >>964
WindowsのGDI+でもそうですけど、Appleの描画環境は
Device Independent + Resolution Independentです。
つまり、Cocoaレベルから解像度をいじることはできないはずです、多分。
- ん??
- Carbonで出来るのに?
というかQuartzはPDFベースだから・・・
- ああ間違えたんか俺 ||orz
すんません逝ってきます
- 【GUIライブラリ】wxWindowsでのひょーん
http://pc5.2ch.net/test/read.cgi/tech/1052186697/
- NSTaskでUnixコマンドを実行しようとしてるんですが
実行しようとすると「stderr is not a tty」等と怒られてしまいます。
調べてみると出力先の問題だということは何となくわかったんですが
こういう場合どうしたらいいんでしょうか?
- 実行しようとしているUnixコマンドは何ですか?
stderrがttyを前提としているコマンドって何だろう?
- >>971
実行した時にパスワードの入力を求めてくるものなので
出力先が端末(?)でないと駄目、というようなことらしいです。
NSPipeだと無理なんでしょうか?
- あ、関連がありそうなこのトピックを今読んでます。
NSTaskとNSPipeで対話型コマンドを実行する場合について?
http://cocoa.mamasam.com/COCOADEV/2002/01/1/21162.php
- >>972
質問の答えになってませんよ。sudoコマンドとかですか?
- いんや、解凍コマンドです。
パスワードがかかってる場合、実行するとTerminalではそれを入力するように
いわれるんですが、NSTaskとNSPipeでそれを受けたい&答えたいというわけで。
- >972
コマンド名を書けない訳は?
とあるコマンドである場合は別な方法で実行できるとだけ書いておこう。
- >>976
2chでソフトから個人を特定されたくないってのもあり得るんだから、
あんまり追いつめるのも気の毒。
>>975
有名なコマンドなら直接APIを呼ぶなりソースをゲットするなり
それなりの方法もあるよ。そのぶん面倒臭いけど。
- sage
- Project Builderのエディタが不安定なんですが。
とにかくよく落ちる。
returnしても落ちるし、""と入力するだけで落ちたりする。
どうも文法を解釈するときが怪しいんだけど。。。
環境設定を変えると不安定になるという噂を聞いたけど、
同じような症状になった人はいませんかね?
OSは10.2.8です。
- 自動インデントを切れ。
- ずばり、Cocoaプログラマさんにとって
ジャガーまでのProjectBuilderとパンサー以降のXcodeでの違いは?
This page was generated by Dat2HTML Rev.