У меня есть a MKMapView
. Иногда после того, как мой контроллер представления отклонен, я получу a EXC_BAD_ACCESS
.
Я включил NSSZombies
и это похоже MKMapView
делегат — мой контроллер представления! — называется, несмотря на обоих MKMapView
и UIViewController
подкласс освобожден. Я проверил, и мое управление памятью корректно.
Что продолжается?
Самое близкое, что я могу получить:
>>> [match.groupdict() for match in re.finditer('(?P<b>.b.)|(?P<i>.i.)', 'abcdefghijk')]
[{'i': None, 'b': 'abc'}, {'i': 'hij', 'b': None}]
Как вы объединяете словари, то зависит от того, ожидаете ли вы более одного совпадения. Если требуется только одно совпадение, можно выполнить следующие действия:
>>> results = {}
>>> for match in re.finditer('(?P<b>.b.)|(?P<i>.i.)', 'abcdefghijk'):
... results.update(dict((k,v) for k, v in match.groupdict().iteritems() if v is not None))
...
>>> results
{'i': 'hij', 'b': 'abc'}
Или для нескольких совпадений:
>>> results = defaultdict(lambda: [])
>>> for match in re.finditer('(?P<b>.b.)|(?P<i>.i.)', 'abcdefghijkabcdefghijk'):
... for k, v in match.groupdict().iteritems():
... if v is not None:
... results[k].append(v)
...
>>> results
defaultdict(<function <lambda> at 0x7f53d0992c08>, {'i': ['hij', 'hij'], 'b': ['abc', 'abc']})
-121--4518442- Для кода сервера, т. е. для конечных точек, как обычно. для xap, я думаю, у вас есть несколько вариантов в зависимости от того, как вы управляете коммуникациями. Возможно, запрос содержит номер версии, и если сервер был обновлен, принудительно загрузите какой-либо код для перезагрузки клиента, битовый lame, грязный, но выполнимый. Возможно, более чистым решением было бы управление сеансом клиентов, который, предположительно, является частью и посылкой с запросами в заднюю часть. При развертывании новой версии сеанс клиента может стать недействительным, что, возможно, приведет к обновлению страницы с помощью пользовательской логики. Если ваш протокол является push base вы можете отправить команду клиенту, чтобы сделать то, что вы хотите, для многих систем, которые находятся в течение всего дня его вероятность того, что эта инфраструктура будет существовать (если вы создали его красиво:)). Например, наш уровень обслуживания абстрагирован от моделей репозиториев и моделей просмотра, в нашем случае мы могли бы отправить выход из системы или, возможно, конкретную команду, чтобы ввести на клиенте некоторую пользовательскую логику, информирующую об обновлении приложения и обновить ваш браузер, когда это будет сделано. Наша оболочка легкая, поэтому наши модули (в основном другие xap) могут быть обновлены во время обновления.
-121--3753605- Это связано с работой пути MKMapView
. Ожидается операция, поэтому MapKit сохраняет MKMapView
, и фактически он еще не был удален. Это сама по себе не проблема. Проблема в том, что он по-прежнему отправляет сообщения делегату.
Обходной путь прост: В рамках очистки контроллера вида установите делегат представления карты на nil
, что не позволит MKMapView
отправлять ему сообщения.
Это задокументировано в Ссылка на протокол MKMapViewDelegate :
Перед освобождением объекта MKMapView, для которого задан делегат, не забудьте установить для свойства делегата этого объекта значение nil. Одно место, где это можно сделать, - это метод dealloc, в котором используется вид карты.
Отредактируйте: Дайте Оскару преимущество, а также чуть ниже, который предоставил здесь цитату из документации.
Учитывая ARC, я предлагаю установить делегат представления карты на nil
в dealloc
контроллера представления.