Повторный запрос POST, когда IBAction вызывает только один раз

У меня есть IBAction, подключенный к UIButton, который при нажатии вызывает метод запроса HTTPS POST. Метод вызывается и запрос сделан, сервер отвечает, и все модно.

Проблема, которая у меня возникла, очень своеобразна. Я запускаю приложение и нажимаю кнопку. Запрос делается один раз. Я нажимаю его снова, и запрос запускается дважды, я нажимаю его снова, и запрос запускается три раза, и так далее, и так далее. Я продолжил до 20 запросов POST, сделанных одним нажатием кнопки!

Я установил точки останова, чтобы увидеть, вызывался ли метод более одного раза, а точка останова показала только один. Но затем я включил журнал для регистрации запроса, и это показало мне, что оно повторяется, но по неизвестной причине.

У меня нет ни петель (которые я вижу), ни NSTimers, ни какой-либо причины для этого. Вот IBAction, связанный с кнопкой:

- (IBAction)startDrill:(id)sender
{
    chosenDict = startDict;
    [self submitDrillControl];
    NSLog(@"now");
}

Вот NSDictionary, который он устанавливает:

    startDict = [NSDictionary dictionaryWithObjectsAndKeys:personID,@"person", selectedDrillID,@"drill", @"start",@"action", nil];

А вот и метод POST

- (void)submitDrillControl
{
    NSLog(@"1");

    NSError *error;
    NSData *jsonParams = [NSJSONSerialization dataWithJSONObject:chosenDict options:NSJSONWritingPrettyPrinted error:&error];

    NSString *paramString = [[NSString alloc] initWithData:jsonParams encoding:NSUTF8StringEncoding];

    NSString *bodyData = [NSString stringWithFormat:@"token=%@&method=drill_control&params=%@", savedToken, paramString];

    NSMutableURLRequest *postRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://my.url/"]];

    [postRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Field"];

    [postRequest setHTTPMethod:@"POST"];
    [postRequest setHTTPBody:[NSData dataWithBytes:[bodyData UTF8String] length:   [bodyData length]]];

    NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:postRequest delegate:self];

    NSLog(@"wtf? %@", postRequest);
    NSLog(@"Connection: %@", conn);
}

(Если кому-то интересно, для чего нужен словарь, он содержит параметры, которые требуются моему API для выполнения запроса.)

Я не уверен, какой другой код я должен публиковать, или нужен ли какой-либо другой код, так как я действительно не знаю, почему это происходит. Не стесняйтесь, дайте мне знать, если я должен добавить, удалить или изменить что-то в этом вопросе.

РЕДАКТИРОВАТЬ

Поэтому, после еще нескольких копаний (как только я проснулся), я обнаружил, что вышеупомянутое не является запросом POST, который повторяется. После этого запроса POST существует ответ от сервера, который запускает NSNotification. Селектор, который вызывает наблюдатель NSNotification, является запросом POST, который повторяется. Установка точек останова показывает, что он вызывается несколько раз. Почему уведомления складываются? Как я могу предотвратить повторный вызов?

1 ответ

Решение

Если вы используете блок на основе NSNotifications они должны быть удалены по отдельности. Сохраните уведомление в ivar или свойстве и удалите его явно.

Я видел, где уведомление устанавливается несколько раз и не удаляется. Затем каждый экземпляр срабатывает; Похоже, это то, что происходит с вами.

Особенно removeObserver:nil ... не удалит наблюдателей на основе блоков.

Другие вопросы по тегам