Чтобы решить эту проблему, у вас есть два варианта на выбор, насколько я вижу;
p:growl
Первый вариант - сделать [113 ]. Это переведет рычание PrimeFaces в режим, в котором он только слушает события AJAX и сообщения, которые не имеют определенного идентификатора клиента. С помощью этого метода добавление for=id
к компоненту / запросу приведет к тому, что он будет показан только в месте назначения (например, внутри p:message
, а не в рычании.
<p:calendar id="calendar">
<p:ajax global="false" event="dateSelect" />
</p:calendar>
<p:message for="calendar" />
<p:growl globalOnly="true" />
<p:growl for="id"/>
] Второй способ - заставить рычание слушать только сообщения с определенным идентификатором клиента. Это будет выглядеть примерно так:
<p:calendar id="calendar">
<p:ajax event="dateSelect" />
</p:calendar>
<p:message for="calendar" />
<p:growl for="someotherId" />
В зависимости от ваших целей разработки, вы будете предпочитать одно или другое в качестве основного решения. Второе решение будет фильтровать и игнорировать сообщения лиц без какого-либо назначения, так как нет компонента для их получения. Это может быть или не быть желательным.
Вы возвратите код состояния в didReceiveResponse
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
NSHTTPURLResponse *httpResponse;
httpResponse = (NSHTTPURLResponse *)response;
int statusCode = [httpResponse statusCode];
//statusCode will be the http code returned like 201,500
}
Для остановки соединения используйте переменную уровня класса для соединения. Лучший способ пойти об этом был бы, создают обертку, которая отправляет запросы и получает ответ. Сделайте свой viewcontroller делегатом этого класса и каждый раз, когда didReceiveResponse дает код состояния ошибки, назовите соответствующий метод делегата и остановите соединение.
Вот хороший пример класса обертки
Да, необходимо выпустить тот объект. См. Руководство по программированию управления памятью для Какао. В основном, если Вы когда-нибудь создаете объект с именем метода, которое начинается alloc
или new
или содержит copy
, Вы становитесь владельцем объекта и ответственны за освобождение его позже. Только в случае, где Вы знаете, что испытываете необходимость в объекте вплоть до завершения программы, это хорошо для не освобождения его, в этом случае операционная система исправляет память, когда приложение завершается.
Если Вам только нужен объект в небольшом объеме, можно отправить его autorelease
сообщение. Это добавит его к пулу автовыпуска. Пул автовыпуска периодически отправляет a release
обменивайтесь сообщениями к каждому объекту в нем. Это отчасти сложно; посмотрите раздел по пулам автовыпуска. Например:
В этом случае, тем не менее, потому что NSURLConnection
s являются асинхронными, автовыпуск не будет работать. Вы не знаете точно, когда это собирается перезвонить в Ваш объект с данными, таким образом, Вы хотите удостовериться, что объект еще не был выпущен. Единственный способ быть уверенным состоит в том, чтобы знать точно, когда Вы сделаны с объектом и затем отправляете ему a release
передайте себя.
Все различные init*
функции возвращают указатель на данный объект, таким образом, можно просто сделать:
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
...
// when done with connection:
[connection release];
Ответ на вопрос в "обновлении"...
Сразу автовыпустите NSURLConnection. Объект соединения сохраняется NSRunLoop (к которому он добавляет себя автоматически, если Вы не используете startImmediately:NO конструктора). Это будет автоматически удалено из выполненного цикла (и следовательно dealloc'd) на ошибке или конце.