2010-12-11 10 views
1

Objective-Cプログラミングから始めたばかりですが、C言語の経験があります。私はiOSに移植したいコード(約124行)を持っています。 OS X)。このコードの目的はURLを生成し、それをMobile Safariで開くことです。アプリケーションはユーザーインターフェイスを持たず、URLを生成して開くことを唯一の目的としているので、このコードをアプリケーションの起動時に実行します。iPhoneのObjective-CプロジェクトでCコードを実行する

私はいくつかの研究を行って、私はいくつかのコードは、起動時に実行されたい場合は、私は巻き毛の間

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ... } 

セクションで、「App_NameDelagate.m」ファイルにそれを置くために持っていることを見出しましたブラセス。問題は、私は私のコードを貼り付けし、(Xcodeで)それをコンパイルするとき、私はすべての関数の宣言では、と言って、約7かそこらのエラーと警告を取得し、次のとおりです。

ネストされた機能は使用し、無効になっています-fnested-関数は(私は私の様々な機能のためのコードを書き始める、そしてメインは「場合」機能が終了したとき)

そして、もう一つのポイントで再度有効にする

コントロールは非void型関数の終わりに到達しました

1つの "if"関数と "if"関数の間に呼び出される他の5つの関数で構成されています。

私は同じ目的(生成し、URLを開くために)のMac版のアプリケーションを構築するためにそれを使用し、それは正常に動作するので、それは自己であるコードを知っています。

OSXの場合と同じように、OS XからiOSにURLを開くときに、[NSWorkspace sharedWorkspace]ではなく[UIApplication sharedApplication]を使用すると、ココアの変更の一部が実現します。だから私はそれが問題だとは思わない。私はまた、 "main.m"ファイルで宣言されていることを知っているので、貼り付けられたコードの先頭にある "main"関数の標準宣言を削除しました。

私のアプリケーションのMac版では、私のコードをまっすぐに "main.m"ファイルに置くことができ、コードはコンパイルされ、アプリケーションは正常に動作します。私が収集するiOSでは、これは当てはまりません。

これについての助けがあれば、それは私を夢中にさせてくれて大いに感謝しています!

ありがとうございました。

UPDATE: '入れ子関数' で問題を引き起こし線である:

INT generateCrosswordNumber(){

INT getDayNumber(){

BOOL checkIfSunday(){

空隙handleSunday(){

void normalDay(){

これらの各行の下には、呼び出される関数のコードがあります。関数ごとに、上の行で開いているものを閉じる別の中括弧があります。

return YESfunction reaches end of non-void functionエラーを修正しました。ありがとうございました!

+0

警告/エラーの原因となっている行を引用できますか? 「制御は非ボイド関数の終わりに到達する」に関しては、メソッドの実装の最後の行に 'return YES;'を挿入します: " - (BOOL)..."メソッドシグネチャはメソッドがBOOL値を返すことを期待しています。 – Costique

+0

ありがとうございました。Costique、 "return YES"はうまくいきました。問題の原因となっている行の引用符を更新しました。 – baxterma

答えて

5

まず、このアプリがApp Store向けのものであれば、ある種のUIが必要だと思います。私はロードしてすぐにSafariに出くわすことはできないと思います。しかし、あなたはAppleとそれをチェックしなければならないでしょう。

しかし、問題は、通常、Objective Cのメソッド内でCの関数を定義することができないということです。 [私はあなたがコンパイラでネストされた関数を有効にすることができたと思うが、私は目的のCメソッドの中にネストされたC関数でそれを試したことはありません。理論的に仕事をする必要がありますが、それは我々が正常に物事を行う方法はありません。]

しかし、あなたはあなたの方法でコール C関数をできること。実際、私たちはいつもそれをしています。

- (int)someMethod:(int)x { 

    int someFunction(int x) { 

     return x + 2; 
    } 

    x = someFunction(x); 

    return x + 3; 
} 

ここで、メソッドの定義の中でC関数を定義していることに注意してください。しかし、代わりにこれを行うことができます:

int someFunction(int x) { 

    return x + 2; 
} 

- (int)someMethod:(int)x { 

    x = someFunction(x); 

    return x + 3; 
} 

ここで、C関数を定義し、その関数を使用する目的のCメソッドを定義しています。好奇心のうち

EDIT

は、私はにObjCメソッドの定義内でCの関数定義をネストのいくつかの簡単な例をテストしました、そしてそれは-fnested-機能とGCCで正常に動作するようです。たぶん、トップレベルで関数を定義するよりも表現力豊かな単純なケースがあるかもしれませんが、メソッド内で複数の関数に対してこれを多かれ少なかれ実行しているのであれば、おそらくそれは素晴らしい設計ではないでしょう。また、Clangはこれをサポートしていないので、少なくともこのプラットフォームでこのようなコードを書くことはあなたの長期的関心にはあまりないでしょう。

0

あなたのObjective-Cコードは構造的に正しくありません。構造が壊れている場所を見つけるための最良の方法は、おそらくです。すべてを選択してを選択し、次に編集 - >書式 - >再インデントを選択します。

すべての関数定義は一番左の列から始める必要があります。ファイルの解析が壊れていることは明らかです。それはおそらく欠けているでしょう]または}。

関連する問題