0

ステータス コードに基づいて事前定義されたエラーを作成するために、NSError カテゴリを作成しようとしています。ただし、カテゴリから NSError を作成しようとするたびに、

+[NSError errorWithDomain:code:userInfo:]: unrecognized selector sent to class 0x2b2b20

NSError Initializer のインスタンス バージョンも呼び出してみましたが、結果は同じです。

+(NSError*)errorOfType:(ErrorType)errorType inClassNamed:(NSString*)_nsClassName andMessage:(NSString*)_nsMessage
{
    return [[[self class] alloc]initWithType:errorType inClassNamed: _nsClassName andMessage:_nsMessage];
}


#pragma mark -
#pragma mark - Init

-(id)initWithType:(ErrorType)errorType inClassNamed:(NSString*)_nsClassName andMessage:(NSString*)_nsMessage
{
    NSInteger _nCode = [self codeFromErrorType:errorType];
    NSDictionary *_nsUserInfo = [self localizedDescriptionForErrorType:errorType andMessage:_nsMessage];

    NSLog(@"Why Does this fail? Is this Nil? %@, \n%i, \n%@", _nsClassName, _nCode, _nsUserInfo);

    if ([self respondsToSelector:@selector(initWithDomain:code:userInfo:)]) {
        if (self = [self initWithDomain:_nsClassName code:_nCode userInfo:_nsUserInfo]){

        }
    }else{
        NSLog(@"NSERROR Did not create!!!");
    }

    return self;
}

静的メソッドを呼び出してこのコードを実行すると、出力は次のようになります。

2013-05-10 17:46:18.851 BMPassSDK-DemoApp[99692:c07] Why Does this fail? Is this Nil? Domain, 
107, 
{
    NSLocalizedDescription = "A connection to the server could not be made. Please Try again later. ";
}
2013-05-10 17:46:18.851 BMPassSDK-DemoApp[99692:c07] NSERROR Did not create!!!
2013-05-10 17:46:18.852 BMPassSDK-DemoApp[99692:c07] +[NSError errorWithDomain:code:userInfo:]: unrecognized selector sent to class 0x2b2b20
(lldb) po 0x2b2b20
$0 = 2829088 NSError
(lldb) 

私が欠けているものについて誰か提案がありますか?

4

1 に答える 1

2

このクラスを最初に作成したときは、NSError のサブクラスでした。後でサブクラスからカテゴリに変換しようとしたときに、誤ってヘッダー ファイルの基本クラスの名前を NSError ではなく NSObject 型に変更してしまいました。もちろん、NSObjects が selector に応答しないため、これが問題の原因でしたinitWithDomain:code:userInfo

とにかく、見てくれてありがとう。それが他の誰かに役立つことを願っています。

于 2013-05-15T18:19:26.707 に答える