Не в состоянии поймать исключение из объекта прокси под Xcode 3.2.3 - PullRequest
2 голосов
/ 08 сентября 2010

Я использую HessianKit для связи с сервером. В случае отключения сети или сервера Гессиан будет выдавать исключение, поэтому я помещаю каждый вызов Гессиана в блок @try ... @catch. Все работало нормально, пока я не обновил Xcode с 3.2.2 до 3.2.3. Я написал некоторый тестовый код и обнаружил в Xcode 3.2.3, что исключение перехвата не будет выполнено, если исключение было вызвано прокси-объектом.

MyProxy.h:

@interface MyProxy : NSProxy {
}
@end

MyProxy.m:

@implementation MyProxy

- (id)init {
    return self;
}

- (void)forwardInvocation:(NSInvocation *)invocation {
    NSLog(@"Call method %@", NSStringFromSelector([invocation selector]));
    [NSException raise:@"MyException" format:@"this is an exception"];
}

- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector {
    .....
}

@end

Код с использованием MyProxy:

@try {
    MyProxy *p = [[MyProxy alloc] init];
    [p doSomething];
    [p release];
}
@catch (NSException * e) {
    NSLog(@"%@", e);
}

Когда эти коды собираются в xcode 3.2.2, исключение может быть правильно перехвачено. Но в xcode 3.2.3 программа прекращает работу после вывода следующего сообщения на консоль:

2010-09-08 21:09:29.877 BriefCase[34651:40b] Call method doSomgthing
2010-09-08 21:09:29.879 BriefCase[34651:40b] *** Terminating app due to uncaught exception 'MyException', reason: 'this is an exception'
2010-09-08 21:09:29.880 BriefCase[34651:40b] Stack: (
    45955152,
    47113004,
    45692683,
    45692522,
    151932,
    45426420,
    45423090,
    9352,
    4417860,
    4421967,
    4447550,
    4429047,
    4461016,
    53399932,
    45234332,
    45230248,
    4420129,
    4453234,
    8812,
    8666
)
terminate called after throwing an instance of 'NSException'
Program received signal:  “SIGABRT”.

Что я могу сделать?

Ответы [ 2 ]

1 голос
/ 14 сентября 2010

Я подал ошибку в Apple, и ответ:

Было установлено, что это известная проблема, которая в настоящее время исследуется с помощью техники. Эта проблема была зарегистрирована в нашей базе данных ошибок под оригинальным идентификатором ошибки # 7995323.

0 голосов
/ 08 сентября 2010

Может быть, настройки вашего проекта / цели / исполняемого файла испорчены?Установлен ли флажок «Включить исключения Objective-C» для вашей конфигурации / цели / и т. Д.?

Если это так, возможно, вам следует сообщить об ошибке в Apple здесь .

...