ページ 11

Xcode,Objective-C

Posted: 2011年5月20日(金) 17:12
by go
警告、エラーが無くビルドできたものの落ちるので、デバッガで調べたところ、

#import <UIKit/UIKit.h>

int main(int argc, char *argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}

int retVal = UIApplicationMain(argc,argv,nil,nil);に赤矢印がついていました。ここに問題があるんでしょうが、なにが原因かわかりません。。

わかるかたおねがいします。

Re: Xcode,Objective-C

Posted: 2011年5月21日(土) 17:00
by UN
ちょっと説明するにも、説明する項目が多すぎるのでざっくりと説明します。
文法を見る限り、恐らくIPhone?かなにかだと思いますが、
UIApplicationMainの第3,第4引数にそれぞれUIAplicationクラスを敬称したクラスと
Delegateを指定しなければいけません。UIApplicationMain関数に関しては他の参考サイトのほうが
ずっと詳しく説明しているのでそちらを参考にしてみてください。

ではなぜnilでも平気なのか、という疑問がでますが、
プロジェクトの***_lnfo.plistを開いて、一番下のMain nib file~~~
という場所に注目してください。
これはUIApplicationMainを呼ばれたときに、最初に呼ぶnibファイルはどれかというのを
指定することができます。
nibファイルというのはInterFaceBuilderという、GUIベースでもviewを作成できるようにしたツールのようなものです。
通常プロジェクトを作成した段階では、MainWindowというnibファイルが指定されているかと思います。

これらをふまえて本題のUIApplicationMainで落ちるという原因として考えらそうなのは、
1:***_lnfo.plistでnibファイルを指定していない(自分のdelegateなどを渡して管理したい場合は逆にここを消さないといけない)
2:1で指定したnibファイルがプロジェクトにリンクされていない
3:nibファイルはリンクされているが、その先のUIControllerでまずい処理をしている
nibファイルベースで作成しているのにloadviewをオーバーライドしている等

いずれにせよ、原因が無数に考えられるのでもう少し詳しく調べてみてください。
かなりUIKit独自のルールばかりでこのへんは苦しめられるところなのですが、
UIKitを使用して作成する以上、上記であげた専門用語、およびその意味を理解することは
避けては通れません。InterFaceBuilderを使用して組む場合には適当にやってもそれなりに動きますが・・

Re: Xcode,Objective-C

Posted: 2011年5月21日(土) 17:38
by go
ありがとうございました!なんとか走りました。ただ言われた事を無駄にしないためにも調べ倒してみます。