Исключение/Обработка ошибок в Objective C (приложение для iPhone)

PowerShell
Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess

cmd

 C:\> netstat -a -b

(Добавляют -n для остановки его пытающийся разрешить имена узлов, которые сделают его намного быстрее.)

рекомендация датчанина Примечания для TCPView. Это выглядит очень полезным!

Дисплеи-a все соединения и порты прослушивания.

Дисплеи-b исполняемый файл, вовлеченный в создание каждого порта подключения или порта прослушивания. В некоторых случаях известные исполняемые файлы размещают несколько независимых компонентов, и в этих случаях отображена последовательность компонентов, вовлеченных в создание порта подключения или порта прослушивания. В этом случае исполняемое имя находится в [] в нижней части, на вершине компонент, который это назвало, и т.д пока TCP/IP не был достигнут. Обратите внимание, что эта опция может быть трудоемкой и перестанет работать, если у Вас нет достаточных полномочий.

адреса Дисплеев-n и номера портов в числовой форме.

Дисплеи-o идентификатор процесса владения, связанный с каждым соединением.

5
задан BinaryMisfit 21 October 2011 в 08:56
поделиться

3 ответа

При сбоях первым шагом является использование сообщений об ошибках и отладчика, чтобы выяснить, какой вызов вызывает проблему. Если проблема вызвана неперехваченным исключением, прочтите эту статью Apple об обработке исключений . Конкретный ответ действительно зависит от вашего кода и от того, что именно вызывает сбой, поэтому я не буду рассуждать о конкретном решении.

Что касается обнаружения кодов ответа сервера об ошибке (например, 404), то « s более специфичен для WebKit. Я предполагаю, что вы используете UIWebView на iPhone и, вероятно, заметили, что ни один из основных методов не возвращает ошибок. Это связано с тем, что он использует модель делегата для асинхронного сообщения о ходе выполнения или ошибках. (Это имеет смысл, потому что вы не хотите, чтобы ваш код пользовательского интерфейса зависел от медленно загружающейся (или несуществующей) веб-страницы. Чтобы получить уведомление о таких ошибках, необходимо выполнить несколько шагов.

  1. Принять Протокол UIWebViewDelegate , обычно в том же классе, который для удобства запускает загрузку веб-страницы.
  2. Установите этот объект в качестве делегата экземпляра UIWebView. (Он имеет свойство delegate , поэтому вы можете использовать что-то вроде uiView.delegate = self или [uiView setDelegate: self] в зависимости от того, что вы предпочитаете.)
  3. Реализуйте webView: didFailLoadWithError: метод в этом классе. (Вы можете получить уведомление о завершении загрузки, реализовав webViewDidFinishLoad: .) Здесь вы включаете логику того, что должно произойти при возникновении ошибки.

Я не видел никакой подробной документации о содержании любых конкретных ошибок, переданных с помощью этого метода делегата, но это стандартный объект NSError , и я рекомендую проверить содержимое, вызвав его методы, такие как -localizedDescription и -userInfo .

Вот пример кода с исключенными для краткости операторами #import.

MyClass.h

@interface MyClass : NSObject <UIWebViewDelegate> {
  IBOutlet UIWebView* myWebView;
}
-(void)webView:(UIWebView*)webView didFailLoadWithError:(NSError *)error;
@end

MyClass.m

@implementation MyClass
- (id) init {
  if ((self = [super init]) == nil)
    return nil;
  // initialize myWebView
  myWebView.delegate = self;
  return self;
}

- (void) webView:(UIWebView*)webView didFailLoadWithError:(NSError*)error {
  ...
}
@end
7
ответ дан 13 December 2019 в 22:14
поделиться

Проверить соединение довольно просто ...

NSString * test = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.stackoverflow.com"]];
if (test == nil) {
  //display an alertview saying you don't have an internet connection
}
2
ответ дан 13 December 2019 в 22:14
поделиться

Использование URL-адреса для проверки подключения не является хорошей идеей, это недостаточно надежно, чтобы определить, не работает ли интернет-соединение, веб-сайт или какая-либо другая проблема с сетью и т. Д. И выше все это добавляет накладные расходы к вызову в отношении сетевого трафика.

Посмотрите демонстрацию Reachability на сайте Apple, она использует правильный способ определения подключения, в том числе, подключены ли вы к Wi-Fi и т. д.

1
ответ дан 13 December 2019 в 22:14
поделиться