0

こんにちは、私はプログラミングの初心者ですが、Objective C のいくつかのチュートリアルに従っています。例外処理のチュートリアルで問題に遭遇しましたが、私のコードは同じように機能しませんでした。

まず第一に、これはメインの私のコードです:

#import  < Foundation/Foundation.h> 
#import "Numz.h"

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

@autoreleasepool {

    Numz *n = [[Numz alloc]init];
    @try {
        [n thisisgoingtogetanerror] <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< error on this line      
        }

    @catch (NSException *e) {
            NSLog(@"you got an error in your program");
        }
        NSLog(@"this is code aftr the error");
   }

   return 0;
}

上記のエラーは言う

「Numz」の目に見える @interface がセレクター「thisisgoingtogetanerror」を宣言していません

私のインターフェイスと実装は作成されていますが、内部に変数やメソッドが作成されていませんが、そもそもエラーを処理する必要があるのはそのためではありませんか?
また、どのようなコンソール ビューも取得できません。ビルドが失敗するだけで、そのエラーが表示されます。

変更する必要があるのはxcode 4.6 の設定かもしれませんが、コードを実行してエラーを処理することはできません。オンラインで調べましたが、答えが見つかりません。

どんな助けでも素晴らしいでしょう。

4

2 に答える 2

2

これまでに宣言されていないメソッドを呼び出しているため、コンパイラは不平を言っています。

Numzそれを次のように変更します ( がメソッドのサブクラスでNSArrayも実装でもないと仮定しますcount): [n count];

フロー制御に例外を使用しないでください。つまり、例外を処理してから@throw、 を使用@catchして例外を処理し、実行を継続するべきではありません。iOS/Cocoa の例外は、回復不能なエラーを示すためにのみ使用されます。

これを試して:

@interface NSObject(Badness)
- (void)methodBadness;
@end

次に、コードでそのメソッドを呼び出します。コンパイラは警告せず、ランタイムは @throw する必要があります。

于 2013-06-02T19:31:36.400 に答える
0

例外処理は、実行時のエラー/例外に使用されます。しかし、あなたが得るエラーはコンパイル時に発生します

次のような方法でランタイム エラーを発生させることができます。

@interface RuntimeError : NSObject
+ (void)cause;
@end

@implementation RuntimeError
+ (void)cause {
    NSAssert(NO, @"This is a runtime error caused through a assertion failure")
}
@end

// Call it with
//     [RuntimeError cause]
// inside the @try-Block
于 2013-06-03T15:26:09.240 に答える