Cocoaはさっぱり!!! version.13

このエントリーをはてなブックマークに追加
952名称未設定:2009/11/07(土) 20:40:08 ID:og+XN/eF0
>>951
948です。
理解してもらっているようですが、別にxib file, windowControllerが不要であると主張しているわけではありません。
手間はかかるけど、無しでもコーディングできるといっているだけです。
昔のTextEditや荻原本のサンプルのようにコードがかなり増えます。
ちなみにcurrentDocumentはdelegateを使って[[NSApp mainWindow] delegate]で代用します。

話は変わって、Mac OS X Cocoa プログラミング 第3版が届きました。
残念なことにdeprecateされたNSCalendarDateや、新しく追加されたNSPaseteboardのAPIへの
言及はありませんでした。snow leopardに対応していると銘打っていたので、もしかしたらと期待したのですが。
脚注とかでふれて欲しかった。
953名称未設定:2009/11/07(土) 21:00:13 ID:+g6kRVmC0
>>952
なるほど、delegate を使うのは思い付きませんでした。
情報どうもありがとうございます。
954名称未設定:2009/11/08(日) 00:13:44 ID:AOBYwIZ30
NSCollectionView ってバイディング前提のビュー?
バインディング無しじゃ使えないんでしょうか。
955名称未設定:2009/11/08(日) 11:55:20 ID:DwnUsOEj0
CollectionViewItem から、representedObject に接続して内容を得るのに バインディングした方が楽。
956名称未設定:2009/11/08(日) 12:34:32 ID:ljpiIkUr0
プログラムとか興味ないのですが、ここが一番詳しそうなので質問させてください。
↓のリンク先の内容についてですが、Snow LeopardのCore Animationでは、
具体的にどのようなこと(表現?)が可能になっているのでしょうか?

Core Animation Release Notes
http://developer.apple.com/mac/library/releasenotes/GraphicsImaging/CoreAnimation_RN/index.html
957名称未設定:2009/11/08(日) 13:43:52 ID:D0/UY3D50
>>956
「興味無い」とか言う奴に誰が答えるんだよw
958名称未設定:2009/11/08(日) 14:45:47 ID:LF+h2O0g0
>>956
ばーかばーか
959名称未設定:2009/11/08(日) 15:13:35 ID:ljpiIkUr0
聞き方が悪かったのかな?
要するにエンドユーザー的な立場で、
今回の追加部分で可能になること(表現?)は何か?
ということを知りたいと思ったのですが。
960名称未設定:2009/11/08(日) 18:11:51 ID:eEltJnv60
>>659
開発者にはちょっと便利になる。
エンドユーザーには何も可能にならない。開発者がアプリケーションを作らなければ何も。
961名称未設定:2009/11/08(日) 18:48:54 ID:IV25VCBo0
新クラスとしてエミッタとグラデーションと拡大縮小みたいなの他
既存クラスの拡張

CAなんていじったことないからちっとも分からんけど
そこ読む限り。
962名称未設定:2009/11/09(月) 00:52:40 ID:CINvb13e0
気がついたらヒレガス本の発売が始まってた。
963名称未設定:2009/11/09(月) 11:03:09 ID:UojbosR50
今日からな。発注済み。
964名称未設定:2009/11/09(月) 17:41:09 ID:QcNjesMqP
6日に楽天ブックスで買って昨日届いた
965名称未設定:2009/11/09(月) 22:46:51 ID:CINvb13e0
今読んでるけど、チャプターがページ開いた奥に記されてるのが困る。
966名称未設定:2009/11/09(月) 23:06:12 ID:H/Mjaj1+O
原書はあんなにかっこいいデザインなのに日本版はどうして
967名称未設定:2009/11/10(火) 15:33:47 ID:JH6K56ar0
Obj-C 2.0で追加された言語仕様を勉強&試用中です。
@propertyについて質問させて下さい。(以下、64bitのみ、ガーベッジコレクタ環境の前提です)
以下のように、readonlyなメンバmyStringを持ちたいのですが、クラス内でも初期化することができません。

//----------------------------------------MyObject.h
@interface MyObject : NSObject
@property(readonly) NSString* myString;
@end
//----------------------------------------MyObject.m
#import "MyObject.h"
@implementation MyObject
@synthesize myString;
- (id)initWithString:(NSString*)str
{
  self = [super init];
  if( self != nil )
  {
    self.myString = str; //ここがコンパイルエラーになる
  }
  return self;
}
@end
968967続き:2009/11/10(火) 15:35:18 ID:JH6K56ar0
自分で考えた対処方法としては以下の3つなのですがどれもあまり良い方法とは思えません。
どうするのがベストなのか、皆さんのご意見下さい。

[1] readwrite,assign にする(でもしたくないなー)

[2] @interfaceに
{
@package
  NSString* myString;
}
を書いて、init〜内で self->myString でアクセスする。
(本来書かなくていいメンバ宣言を書きたくないなー ->でアクセスするのも何か嫌だし)

[3] MyObject.mに
@interface MyObject (Private)
@property(readwrite,assign) NSString* myString;
@end
を書く。
(うーんこれが一番マシ?でも再宣言するのもなー)
969名称未設定:2009/11/10(火) 15:39:30 ID:JFky9bdt0
>>967
readonlyなんだから当たり前だろ
っていうかmyStringインスタンス変数にないじゃん

2.0の前に1.0勉強し直してこい
970名称未設定:2009/11/10(火) 15:44:11 ID:jVmOBu0k0
これは酷い
971名称未設定:2009/11/10(火) 15:54:38 ID:/rvnyQpD0
親クラスでrw、子クラスでsetterをエラーさせるだけでいいのでは?
setterに
[self doesNotRecognizeSelector:_cmd];
って書くやつ。
972名称未設定:2009/11/10(火) 15:56:32 ID:JFky9bdt0
>>968
ああそうか、64bitランタイムだからインスタンス変数の宣言は要らないじゃんってことか。
でも宣言しても何の問題もないから、俺がやるんなら普通にこうするけど。なんでこの選択肢がないわけ?

//----------------------------------------MyObject.h
@interface MyObject : NSObject {
  NSString *myString;
}
@property(readonly) NSString* myString;
@end
//----------------------------------------MyObject.m
#import "MyObject.h"
@implementation MyObject
@synthesize myString;
- (id)initWithString:(NSString*)str
{
  self = [super init];
  if( self != nil )
  {
    myString = str; //GCオンならこれでいいよな
  }
  return self;
}
@end
973名称未設定:2009/11/10(火) 16:48:12 ID:gCSX3uxs0
>>967の意図はFBIのためにivar宣言をあえて省きたいってことかな?>>972のコードで
  NSString *myString;
を抜かすこともできるよね。
974名称未設定:2009/11/10(火) 17:23:51 ID:Gq2SM78m0

64bitランタイムだからインスタンス変数の宣言がいらんってどゆこと??
975967,968:2009/11/10(火) 17:44:21 ID:JH6K56ar0
>>972の方法はコンパイルエラーだったように思いましたが、再度試してみたらできました。すいません。
>>973 いや、書かないと
error: 'myString' was not declared in this scope
とコンパイルエラーになりますよ・・・と思ったのですが、

>>972のコードから NSString *myString; をコメントアウトした場合、
・OS 10.5.8/Xcode 3.1.4ではコンパイラGCC 4.0/GCC 4.2/LLVM GCC 4.2のいずれでも上記のエラー。
・OS 10.6.1/Xcode 3.2.1ではコンパイラGCC 4.0では上記のエラー。GCC 4.2/LLVM GCC 4.2ではOK。
という結果でした。(GCC 4.0のバグ?)
ちなみにコードを書いたプロジェクトは、GC必要/x86_64のみ/SDK 10.5/ターゲット10.5 です。

というわけでOS 10.6環境で開発することにします。皆様ありがとうございました。
書かなくていいはずのメンバの宣言を書きたくなかった程度の事だったのですが、勉強になりました。
976名称未設定:2009/11/10(火) 18:18:29 ID:lJ/hPUpN0
>>975
おーい、ドットシンタックスはメソッドに置き換えられる、って事を忘れてるだろ。
@property (readonly) NSString *myString + @synthesyze myString で
作ってくれるのはゲッタのみで、セッタは無い。にもかかわらず、init… 内で、
self.myString = str; を呼び、 [self setMyString:str]; に読み替えをやっているので、
おこられるんだよ。 myString = str; にすれば怒られないはず。

あと、GCC4.0 はGC オプションはあっても Obj-C2.0 の GC には対応してないんじゃ?
複合的なエラーを単一の原因と思っているから混乱しているように見えるなぁ。
977名称未設定:2009/11/10(火) 18:33:45 ID:lJ/hPUpN0
意図が伝わり難かったかも。>976 はインスタンス変数宣言の有無そのものは問題ではない、
という意味な。
978名称未設定:2009/11/10(火) 18:58:30 ID:C4ehbeyU0
宣言できるものは宣言するのが一番じゃないか?
979名称未設定:2009/11/10(火) 20:57:59 ID:NkYQ0vjO0
>>975
modern runtimeでインスタンス変数をsynthesizeした場合、accessorを介してのアクセスしかできません。
980名称未設定:2009/11/15(日) 00:47:40 ID:WiKkIg+60
NSOutlineViewの左端にある三角形のインジケーターって色変える方法と
グリッド線の長さ調節とかってどなたかわかりませんか
981名称未設定:2009/11/15(日) 00:51:28 ID:nOoAMgZu0
NSTableView で row ごとに高さを変える方法はないでしょうか?
リファレンスを見ましたが setRowHight では row ごとの指定ができません。

具体的には、NSTextFieldCell で文字列の折り返しを行い、それに合わせて
行の高さを調整したいのです。
よろしくお願いします。
982名称未設定:2009/11/15(日) 01:03:54 ID:WiKkIg+60
>>981
http://osdir.com/ml/cocoa-dev/2009-07/msg00376.html

同じ事をNSOutlineViewで悩んだけど、rowごとの指定ならここの一連のスレッドを参考に作ったらうまくいきました。
折り返しの時の高さ計算は
CGFloat height = [cell cellSizeForBounds:
NSMakeRect(0.0, 0.0, [column width],
1000.0)].height+10.0;
この中でやるんだと思います。
983名称未設定:2009/11/15(日) 01:07:06 ID:nOoAMgZu0
>>982
素早く的確な回答、ありがとうございます!
早速ご指摘のURLを参考にやってみます。
984名称未設定:2009/11/15(日) 10:47:44 ID:wlCzXFdR0
後続スレ
Cocoaはさっぱり!!! version.14
http://pc11.2ch.net/test/read.cgi/mac/1258249232/
985名称未設定:2009/11/15(日) 21:30:47 ID:YTAFzzoP0
NSUme
986981:2009/11/15(日) 21:57:28 ID:1yIJ4ExW0
解決しましたが、今後役に立つ人もいそうなのでメモ

NSTableView と NSOutlineView で行ごとに高さを変える方法

NSTableView の場合は
- (CGFloat)tableView:(NSTableView *)tv heightOfRow:(NSInteger)row


NSOutlineView の場合は
- (CGFloat)outlineView:(NSOutlineView *)outlineView heightOfRowByItem:(id)item

いずれもデリゲートメソッド。
987名称未設定:2009/11/16(月) 00:01:05 ID:wlCzXFdR0
988名称未設定:2009/11/16(月) 00:01:42 ID:WiKkIg+60
>>986

それ、メソッドのオーバーライドだけでできました?
自分のところでは結局カスタムセルをcopyWithZone:NULLでコピーしてから、
高さをそいつに計算させてから破棄、
表示はカスタムセル内のdrawInteriorWithFrame:〜内で改めて行うみたいな手間かけてやっとできたよ。
989名称未設定:2009/11/16(月) 00:45:54 ID:1CDGVn6l0
[[NSNotificationCenter defaultCenter] postNotification: ThreadWillTerminateNotification object: self];
990名称未設定:2009/11/16(月) 00:57:04 ID:Gt3OWBC30
宇目
991981:2009/11/16(月) 01:08:20 ID:GyEChZGO0
>>988
はい、オーバーライドしただけです。

ところが...
さっきできたと思ったんですが、表示後にテーブルビューをリサイズして、
行の折り返しが変化すると表示がおかしくなります。
何も変化を与えない状態ではうまくいってるのですが・・・

ご指摘の方法でやってみると改善するかもしれないので、やってみます。


992名称未設定:2009/11/16(月) 01:08:51 ID:5xzVwq/f0
while(![thread isAtEnd]) {
[self ume];
}
といいつつ手動umeなんすけどね
993名称未設定:2009/11/16(月) 01:14:58 ID:lq+Vm/xL0
>>991
俺も選択によってrow の高さを変更させようとしたけど、どうやら
- (CGFloat)tableView:(NSTableView *)tv heightOfRow:(NSInteger)row
を変更するだけでは、初期の高さの変更は出来てもそれからの動的な変更は出来ないっぽいんだよね。
994991:2009/11/16(月) 01:15:43 ID:GyEChZGO0
>>993
なるほど、困りましたねorz

どうしましょう...
995名称未設定:2009/11/16(月) 01:39:21 ID:Gt3OWBC30
流れよく読んでない適当な返答だけど、リサイズされるたびにreloadDataかnoteNumberOfRowsか何か呼べば
tableView:heightOfRow: が呼ばれるんじゃないの?効率悪いやり方かも知れんとは思うけど
996名称未設定:2009/11/16(月) 01:42:08 ID:Gt3OWBC30
と思ったらnoteHeightOfRowsWithIndexesChangedってのがあんじゃん
997名称未設定:2009/11/16(月) 01:52:11 ID:lq+Vm/xL0
>>996
それ使ったらなんか妙なエラーが出るんだよね。
998991:2009/11/16(月) 02:34:57 ID:GyEChZGO0
今はサーバー落ちてるけど、ここ参考になりそう

http://www.cocoabuilder.com/archive/message/cocoa/2009/4/23/235216
999991:2009/11/16(月) 02:38:04 ID:GyEChZGO0
http://www.mail-archive.com/[email protected]/msg34240.html

Part13はなかなか参考になった情報が多かった。みんなありがとう!

どうぞ↓
1000名称未設定:2009/11/16(月) 03:03:37 ID:k2OkWyp00
永遠なれ・・・ジグラット!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。