Я выполняю код, связанный с сетью. Когда код начинает выполняться, и пользователь отправляет приложение в фоновом режиме, и в этот момент, если возникнет исключение, приложение будет уничтожено. если исключение не вызывается, приложение не убивается. Можно ли остановить / приостановить какую-либо сетевую активность? или способ остановить приложение от убийства?
UPDATE
Я использую обработчик uncaughtexception, написанный Мэттом Галлахаром (какао с любовью). Как мне отменить запрос, как только он сработал. Код для запроса вызывается в этой функции
+(NSString*)validate:(NSString*)username password:(NSString*)password server:(NSString*)server port:(int)port encryption:(int)encryption authentication:(int)authentication folders:(NSMutableArray*)folders {
CTCoreAccount* account = [[CTCoreAccount alloc] init];
@try {
[account connectToServer:server port:port connectionType:encryption authType:authentication login:username password:password];
} @catch (NSException *exp) {
NSLog(@"connect exception: %@", exp);
return [NSString stringWithFormat:@"Connect error: %@", [ImapFolderWorker decodeError:exp]];
}
}
- (void)connectToServer:(NSString *)server port:(int)port
connectionType:(int)conType authType:(int)authType
login:(NSString *)login password:(NSString *)password {
int err = 0;
int imap_cached = 0;
const char* auth_type_to_pass = NULL;
if(authType == IMAP_AUTH_TYPE_SASL_CRAM_MD5) {
auth_type_to_pass = "CRAM-MD5";
}
err = imap_mailstorage_init_sasl(myStorage,
(char *)[server cStringUsingEncoding:NSUTF8StringEncoding],
(uint16_t)port, NULL,
conType,
auth_type_to_pass,
NULL,
NULL, NULL,
(char *)[login cStringUsingEncoding:NSUTF8StringEncoding], (char *)[login cStringUsingEncoding:NSUTF8StringEncoding],
(char *)[password cStringUsingEncoding:NSUTF8StringEncoding], NULL,
imap_cached, NULL);
if (err != MAIL_NO_ERROR) {
NSException *exception = [NSException
exceptionWithName:CTMemoryError
reason:CTMemoryErrorDesc
userInfo:nil];
[exception raise];
}
err = mailstorage_connect(myStorage);
if (err == MAIL_ERROR_LOGIN) {
NSException *exception = [NSException
exceptionWithName:CTLoginError
reason:CTLoginErrorDesc
userInfo:nil];
[exception raise];
}
else if (err != MAIL_NO_ERROR) {
NSException *exception = [NSException
exceptionWithName:CTUnknownError
reason:[NSString stringWithFormat:@"Error number: %d",err]
userInfo:nil];
[exception raise];
}
else
connected = YES;
}
Исключение возникает, если я ввожу другой номер порта, в это время возникает исключение в следующей строке
NSException *exception = [NSException
exceptionWithName:CTUnknownError
reason:[NSString stringWithFormat:@"Error number: %d",err]
userInfo:nil];
[exception raise]; // this line kills the app if the app is in background.
Эти функции находятся в библиотеке MailCore. Теперь, если кто-то знает решение, пожалуйста, помогите мне.