2

次のようなカテゴリに init メソッドを追加しようとしています。

@interface NSError (message)

+(id)errorWithCode:(NSInteger)code message:(NSString*)message;
-(id)initWithCode:(NSInteger)code message:(NSString*)message;

@end

- @implementation NSError (メッセージ)

+(id)errorWithCode:(NSInteger)code message:(NSString*)message;
{
    return [[[[self class] alloc] initWithCode:code message:message] autorelease];
}

-(id)initWithCode:(NSInteger)code message:(NSString*)message;
{
    NSMutableDictionary * userInfo = [NSMutableDictionary dictionary];
    [userInfo setValue:message forKey:NSLocalizedDescriptionKey];

    self = [super initWithDomain:@"some.domain" code:code userInfo:userInfo]; // problem line

    return self;
}

@end

しかし、クラス NSObject の「スーパー」ビーイングと initWithDomain に応答しないことについて不満があります...スーパーを NSError にキャストしようとしましたが、コンパイラはそれが許可されていないと言います。

実行すると、「認識されないセレクターが...に送信されました」と表示されるため、単なるキャストエラーではありません。

4

1 に答える 1

3

から継承していないため、同じクラスに新しいコードをNSError追加しました。したがって、代わりに、superおそらく を呼び出す必要がありますself

于 2012-05-08T09:08:21.353 に答える