2013-12-02 1 views
0

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

Проблема, которую я испытываю, очень своеобразна. Я запускаю приложение, и я нажал кнопку. Запрос делается один раз. Я снова ударил его, и запрос дважды выстрелил, я снова ударил его, и запрос выстрелил три раза, и так далее и т. Д. Я продолжал до 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 для выполнения запроса.)

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

EDIT

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

+0

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

+0

@ Шехар Чикара снова повторил вопрос, это не то, что говорит ОП. – zaph

+0

Вы используете 'NSNotification '? – zaph

ответ

1

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

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

В частности, removeObserver:nil ... не будет снимать блокированные наблюдатели.

+0

Это сработало. Я вообще не вызывал 'removeObserver' ... Но почему стек объектов в NotificationCenter?Должна ли она просто перезаписываться, если уведомление уже существует? – CaptJak

+0

Хорошо, напишите ошибку: bugreporter.apple.com – zaph

 Смежные вопросы

  • Нет связанных вопросов^_^