Objective-C [ObjC part:4];

このエントリーをはてなブックマークに追加
943デフォルトの名無しさん:2010/06/10(木) 12:11:55
表明するのは大事だよ

通常アクセスならエラーが出るし、
迂闊に触ってしまうことへの注意喚起も出来るから
それで慣れている人は続ける方がいいよ


Appleのやり方も色々だよね。
昔から有るクラスはコメントで「privateだ」って書いてあったり
idな型不明のオブジェクトに隠蔽したり
@privateで宣言したり。
944デフォルトの名無しさん:2010/06/10(木) 13:06:02
>>943
なるほど、ありがとうございます。
書いている方が安心できるので、書く事にします。
少しでも単純なバグを減らせるなら、これを書くぐらいなんとことないですしね。

id型で思い出しましたが、参考書はかなりid型を使っていますが、Objective-Cは動的型結合があるのでid型で書いた方が、何かと都合が良いのでしょうか。
「ここは絶対hoge型でしょう」みたいな箇所でid型を使うのは、Javaのような静的型付け言語に慣れ親しんでいた私の身には抵抗がありまして…。
「ごちゃごちゃ言う前に慣れろ」と言われれば、それまでなんですけど、ハイ…。
945デフォルトの名無しさん:2010/06/10(木) 14:24:18
荻原本持ってるなら64ページに静的な型について書いてあるよ。
「明確な指針はないので好きにすれば良い」みたいなことが書いてある。

俺はクラス型を指定すると、コンパイル時に警告を出してくれるメリットがある
のでどんどん使っていけば良いと思うよ。
ただ、コンパイル時には静的な型チェックを行ってくれるが、実行時にはすべて
id型になっているということがJavaとは違うので注意。

id型の代わりにクラス型を指定したせいでデメリットが生まれることはあまり
ないと思われる。
946デフォルトの名無しさん:2010/06/10(木) 14:35:23
>>945
ありがとうございます。書いてました。申し訳無いです。

>ただ、コンパイル時には静的な型チェックを行ってくれるが、実行時にはすべて
>id型になっているということがJavaとは違うので注意。

この違いは大きいですね。注意します。ありがとうございました。
947デフォルトの名無しさん:2010/06/10(木) 15:10:05
>>943
WebViewはちょっと面白いよね。
@privateでWebViewPrivateクラスのインスタンス変数を持ってるだけだし、
WebViewPrivateクラスの実装とかはなぜかWebViewDataにある。
948デフォルトの名無しさん:2010/06/11(金) 16:03:43
CFIndex型の変数indexに、どんな値が入っているか見ようと思うのですが、
NSLog("%O", index);
としましたが、ポインタコンパチブルなんたらと怒られました。
何が間違っているのでしょうか?と質問しようとして、

よく見たら、1つ目の引数のポインタが型違うやんみたいなことを言われました。
NSLog(@"%O", index);
としたら、うまく行きました。自己解決しました。ありがとうございました。

以前にもこういうミスがありまして、こういうミス起きないようにするには
どうすればよいでしょうか。変な質問ですがよろしくお願いします。
949デフォルトの名無しさん:2010/06/11(金) 16:50:47
文字列の前には@を付けると頭に叩き込むしかないんじゃないかな。
950デフォルトの名無しさん:2010/06/11(金) 20:30:49
>>948
一度遭遇したエラーや警告を、その原因、対処方法とともに意識して憶えていく努力をする。
951デフォルトの名無しさん:2010/06/11(金) 20:37:59
次に948は、
CFIndex型の変数indexに、どんな値が入っているか見ようと思うのですが、
printf(@"%O\n", index);
としましたが(ry
952948:2010/06/12(土) 14:48:06
みなさんアドバイスありがとうございます。

>>949
「あっと驚くNSString」これで頭に叩き込もうと思います。
頭に叩き込んでいたら怪我をしてしまいまして、これから病院に行ってきます。

>>950
そうですよね。がんばります。

>>951
次は無いようにしたいですね。

そこで新たな質問ですが、
NSLog(@@"%O", index);
のところでエラーが出ます。
原因はなんでしょうか?
953デフォルトの名無しさん:2010/06/12(土) 14:56:21
バカかお前は。
954デフォルトの名無しさん:2010/06/12(土) 23:08:40
バカの相手するのもなんなんだが、log って打って補完すれば NSLog(@""); って補完してくれて "" の中にキャレット動かしてくれるぞ
955デフォルトの名無しさん:2010/06/13(日) 06:40:53
>log って打って補完すれば NSLog(@"");

俺、べつのバカだけど、そうなんだ!べんりだなー
956デフォルトの名無しさん:2010/06/17(木) 23:18:32
すみません 非常に初歩的で申し訳ないんですが、iphone ipadのプログラムがしたいと思い、windowsに>>15
http://www.gnu.org/software/gnustep/experience/Windows.htmlの通りインストールしたんですが、shellのコマンドがわかりません

というかみなさんMACでやってるんですか?
iphone ipad の用プログラミングでvisual C++みたいなのありませんか?
957デフォルトの名無しさん:2010/06/17(木) 23:21:02
スレチ。というか Mac も持ってないのにコード書いても意味ないだろ。
958デフォルトの名無しさん:2010/06/17(木) 23:30:07
>>957
そうなんですか 初級過ぎてすみません><
アップル公式のSDKもよく見たらMAC限定みたいですね 出直してきます
959デフォルトの名無しさん:2010/06/17(木) 23:44:33
ちょっとわらった
960デフォルトの名無しさん:2010/06/18(金) 09:45:40
ttp://code.google.com/p/json-framework/wiki/InstallationInstructions

ここのOption 3を見ながらJSON-Frameworkを使ってMacアプリでテストを行おうとしているのですが、うまくいかずに困ってます。

フレームワークをプロジェクトに追加したので、3.までは終わってると思うのですが、
4の意味がわかりません。これは何をすれば良いのでしょうか?
961デフォルトの名無しさん:2010/06/18(金) 10:31:17
>>960
サイドバーの
「ターゲット」を展開→アプリ名になってる項目を右クリック→「追加」→「新規ビルドフェーズ」→「新規コピーファイル」
開いたパネルの「デスティネーション」を「フレームワーク」に設定
アプリ名の項目を展開→「ファイルをコピー」の上に JSON.framework をドロップ
962デフォルトの名無しさん:2010/06/18(金) 10:34:45
JSON.framework は実際のファイルではなくて
サイドバーの <プロジェクト名>/Frameworks 項目の中に入ってるやつ
963デフォルトの名無しさん:2010/06/18(金) 11:07:33
>>961-962
ありがとうございます。前進できました。
ビルドすると、JSON Frameworkのいくつかのファイルが見つからないというエラーが出ましたので、
私の設定のどこかがまずいのでしょう。
頑張って潰したいと思います。
964デフォルトの名無しさん:2010/06/21(月) 18:46:22
楽しいココアのレヴューにこういう↓のあったんだが、実際のところどう?
あと萩原本以外にいいのないですか?自分はCは中級くらいやれてます

*********************
Leopardにアップグレードしてしまった方、
この本は使えません。Xcode Toolに大幅な変更があったからです。
まだTigerを使っている方。この本は貴方のためのものです。
本の通り作業して行けばCocoaのいろはのい位まではモノになるはずです。
965デフォルトの名無しさん:2010/06/21(月) 19:47:48
スレチ。
966964:2010/06/21(月) 20:09:39
すみませんでした 新macのcocoaスレ行ってきます
967デフォルトの名無しさん:2010/06/24(木) 03:59:04
968デフォルトの名無しさん:2010/06/27(日) 22:15:30
http://codepad.org/H3j8eTAB

このコードで、どのNSLogも出力されないんだが何か間違ってる?
これじゃNSOperationQueueを使う意味がないのは承知の上。
969968:2010/06/28(月) 17:59:49
Appleで聞いてくる
970デフォルトの名無しさん:2010/06/29(火) 18:10:59
 V V
(´・ω・`) うさちゃんピース
971デフォルトの名無しさん:2010/07/02(金) 05:44:56
すみません。
1ヶ月未満の初心者なんですが、初歩的なことでつまずいています。

ヘッダファイルで

@interface PListReadViewController : UIViewController {
NSArray* persons;
}

@property(nonatomic,retain) NSArray* persons;

で、ソースファイルで

@synthesize persons;

-(void)hogehage{
NSBundle* bundle = [NSBundle mainBundle];
NSString* path = [bundle pathForResource:@"test" ofType:@"plist"];
NSArray* persons = [NSArray arrayWithContentsOfFile:path];
}

としてるんですが、hogehageのpersonsはローカル変数として扱われてしまうみたいですね。
interfaceで定義してるpersonsに、パッケージにバンドルされてるplistを配列として展開して、
別の関数内でpersonsを使いたいんですけど、どうしたらいいんでしょうか?
972971:2010/07/02(金) 06:11:49
できました!

ttp://www15.plala.or.jp/NovemberKou/programming/2ndGeneration/2ndHome/RMGWindowController/fixCrashDnD.html
を参考にしました。

NSArrayの使用サンプルはみんな、1関数内で処理が終了してるものばかりで、なかなか見つかりませんでした。

おじゃましました。
973デフォルトの名無しさん:2010/07/02(金) 18:57:59
[NSHoge hoge~~] ってのは自動で autorelease に登録されてると覚えよう。
974デフォルトの名無しさん:2010/07/02(金) 20:38:07
とは限らないけどね
975デフォルトの名無しさん:2010/07/03(土) 17:30:35
[NSHoge new~~] ってのは release されていないってのも併せて覚えよう。
976名無しさん@そうだ選挙に行こう:2010/07/10(土) 15:46:20
iphoneで顔認証を使ったアプリを作りたいんですが
↓で提供されているAPIを使うことって出来ますか?
  iphoneの開発環境で使用するにはどうしたらいいのでしょうか?

http://developers.face.com/
977名無しさん@そうだ選挙に行こう:2010/07/10(土) 16:39:53
スレチ。
978名無しさん@そうだ選挙に行こう:2010/07/10(土) 17:17:49
JAVAスクリプトのライブラリを参照する事てできますか?
979名無しさん@そうだ選挙に行こう:2010/07/11(日) 00:35:32
JavaScript ?
HTMLかXMLで実装した後、NSWebViewで参照すればイイんじゃない?
980名無しさん@そうだ選挙に行こう:2010/07/11(日) 12:32:02
ありがとうございました
981デフォルトの名無しさん:2010/07/13(火) 22:39:12
複数の入門書で勉強をし始めてるんだけど、参考書によって、
NSString* str = @"hoge";
と、
NSString *str = @"hoge";
て感じで、クラス名の後ろに*が付いてるのと、変数名の前に*が付いてるので書き方が分かれてて混乱中。
どっちの方が一般的な表記なんですかね?
一応、どっちもコンパイルは通るんだけど…
982デフォルトの名無しさん:2010/07/13(火) 23:58:35
NSString* str1,* str2;
NSString *str1, *str2;
あとはわかるな?
983デフォルトの名無しさん:2010/07/14(水) 00:17:40
「NSStringへのポインタ」という型だと考えるなら NSString* str
>>982のように変数を複数宣言したときとの整合性を取るなら NSString *str
どっちも一般的だから好きなほうで
984981:2010/07/14(水) 01:29:03
ありがとうございます。
クラスのインスタンスはポインタ型の変数と思えば良いのかな。
Objective-Cに慣れるのに、時間掛かりそうだ…
985デフォルトの名無しさん:2010/07/14(水) 01:47:56
クラスって、単にポインタだから。
Cで関数形式マクロを使ってポインタを隠蔽したような感覚で考えれば簡単。
986デフォルトの名無しさん:2010/07/14(水) 14:04:37
>>981
C ファミリは区切り部分に空白がいくつ入ってもいい。改行でもいい。
> どっちの方が一般的な表記なんですかね?
{ 前後の改行の仕方に複数の流儀があるのと同じこと。

>>984
> クラスのインスタンスはポインタ型の変数と思えば良いのかな。
C はできるの?
malloc() するときはポインタで受け取るでしょ?
[[NSString alloc] init] の alloc はそういうこと。
>>981
t* v; ってのは c++ で一般的な書き方です。
合理性はともかく c++ のコードの大半はこのスタイル。
988デフォルトの名無しさん:2010/07/14(水) 15:38:12
Blocksって一体なんなんすか?
989デフォルトの名無しさん:2010/07/14(水) 16:49:20
無名関数

qsort(3)の第4引数に関数ポインタを渡す代わりに比較用関数を直接書ける
みたいな
990デフォルトの名無しさん:2010/07/14(水) 21:37:44
テーブルビューのセル削除時にデリゲートメソッド(tableView:commitEditingStyle:forRowAtIndexPath:)が呼ばれてスワイプ消去の機能が自動的にアクティブになりますが、スワイプ消去の機能を非アクティブにさせる方法はありますか?
スワイプで編集されたくないときは
canEditRowAtIndex だか何だかで NO 返せば良いんだった様な
>>990
あとそれスレ違いだ。
そういうのは新Mac板のiPhoneのプログラミングスレで。