При отладке NSObjectInaccessibleException - делался недействительным NSManagedObject с ID:0x123456789

def is_valid_ip(ip):
    """Validates IP addresses.
    """
    return is_valid_ipv4(ip) or is_valid_ipv6(ip)

IPv4:

def is_valid_ipv4(ip):
    """Validates IPv4 addresses.
    """
    pattern = re.compile(r"""
        ^
        (?:
          # Dotted variants:
          (?:
            # Decimal 1-255 (no leading 0's)
            [3-9]\d?|2(?:5[0-5]|[0-4]?\d)?|1\d{0,2}
          |
            0x0*[0-9a-f]{1,2}  # Hexadecimal 0x0 - 0xFF (possible leading 0's)
          |
            0+[1-3]?[0-7]{0,2} # Octal 0 - 0377 (possible leading 0's)
          )
          (?:                  # Repeat 0-3 times, separated by a dot
            \.
            (?:
              [3-9]\d?|2(?:5[0-5]|[0-4]?\d)?|1\d{0,2}
            |
              0x0*[0-9a-f]{1,2}
            |
              0+[1-3]?[0-7]{0,2}
            )
          ){0,3}
        |
          0x0*[0-9a-f]{1,8}    # Hexadecimal notation, 0x0 - 0xffffffff
        |
          0+[0-3]?[0-7]{0,10}  # Octal notation, 0 - 037777777777
        |
          # Decimal notation, 1-4294967295:
          429496729[0-5]|42949672[0-8]\d|4294967[01]\d\d|429496[0-6]\d{3}|
          42949[0-5]\d{4}|4294[0-8]\d{5}|429[0-3]\d{6}|42[0-8]\d{7}|
          4[01]\d{8}|[1-3]\d{0,9}|[4-9]\d{0,8}
        )
        $
    """, re.VERBOSE | re.IGNORECASE)
    return pattern.match(ip) is not None

IPv6:

def is_valid_ipv6(ip):
    """Validates IPv6 addresses.
    """
    pattern = re.compile(r"""
        ^
        \s*                         # Leading whitespace
        (?!.*::.*::)                # Only a single whildcard allowed
        (?:(?!:)|:(?=:))            # Colon iff it would be part of a wildcard
        (?:                         # Repeat 6 times:
            [0-9a-f]{0,4}           #   A group of at most four hexadecimal digits
            (?:(?<=::)|(?

версия IPv6 использует" (?:(?<=::)|(?", который мог быть заменен" (?(?" на regex механизмах, которые поддерживают условные выражения со взглядом-arounds. (т.е. PCRE.NET)

Редактирование:

  • Отброшенный собственный вариант.
  • Расширенный regex для исполнения RFC.
  • Добавленный другой regex для адресов IPv6.

Edit2:

я нашел некоторое обсуждение ссылок, как проанализировать адреса IPv6 с regex:

Edit3:

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

11
задан Rog 19 August 2015 в 07:29
поделиться

3 ответа

Решением стала комбинация очистки и этой ошибки набора карт . представление карты удерживало своего делегата после того, как я выпустил свой NSManagedObjectContext. Mapkit запросил у делегата координаты аннотации, и мой объект-делегат попытался запросить объект, который находился в выпущенном контексте (аналогично проблеме Джейсона).

Исправление было таким, как описано в сообщении блога Джейка - установить делегата до нуля, когда вы закончите просмотр карты.

1
ответ дан 3 December 2019 в 09:42
поделиться

Что делает второй контекст, когда он пытается устранить ошибку в объекте, который был удален из постоянного хранилища?

Это похоже на ошибку, которая может состоять из двух частей: вы не ' t объединение изменений из контекста партнера, и у вас есть логическая ошибка, из-за которой вы используете объект в потоке B, который был удален в потоке A.

Обычно вы хотите объединить изменения из контекста партнера, используя - [NSManagedObjectContext mergeChangesFromContextDidSaveNotification:] .

1
ответ дан 3 December 2019 в 09:42
поделиться

Я столкнулся с этой ошибкой раньше, и причина заключалась в том, что я очищал (завершил и выпустил) свой контекст, а затем позже попытался получить доступ к объекту (ранее), управляемому этим контекстом.

В моем случае контекст был контекстом «царапины», который исчезает при закрытии представления. Однако у меня было фоновое задание, созданное представлением, которое хотело обновить объект.

В итоге я создал метод доступа для управляемого объекта, который возвращал ноль, когда [managedObject isFault] было истинным. Затем в своем коде я проверял значение этого селектора средств доступа, чтобы убедиться, что у меня есть допустимый объект для работы (скажем, когда мое фоновое задание, наконец, завершило свою работу).

Я новичок в Core Data, так что, вероятно, есть лучший / более разумный способ сделать это, но я думаю, что это устранило проблему для меня.

7
ответ дан 3 December 2019 в 09:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: