Требуется ли при замене пропусков в Passbook, чтобы новый пропуск отличался от старого?

Я пытаюсь обновить пропуск в Passbook, вызвав -replacePassWithPass: и передав точно такой же проход, который уже есть в PKPassLibrary. Метод возвращает NO (замена не удалась) - почему? (Кстати: консоль на моем устройстве не показывает журналы с iOS)

Документы для -replacePassWithPass: в этом случае не очень полезны:

Это не удастся, если проход с совпадающим идентификатором и серийным номером еще не присутствует в библиотеке или если процесс не имеет права доступа к проходу.

а также:

ДА, если пропуск был успешно заменен; иначе НЕТ.

Я выполняю оба требования.

Нельзя ли таким образом заменить пропуски? Должен ли я использовать -removePass:, а затем попытаться добавить его с помощью PKAddPassesViewController?

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


person matm    schedule 06.12.2012    source источник
comment
По какой причине вам нужно заменить пропуск точно таким же пропуском? Похоже, в этом случае вы должны просто оставить пропуск в покое.   -  person Alex Martini    schedule 07.12.2012


Ответы (1)


Пока passTypeIdentifier и серийный номер одного прохода равен passTypeIdentifier и серийному номеру другого прохода - они являются экземплярами одного и того же прохода. Если между двумя проходами все одинаково - это один экземпляр одного прохода.

Если у вас есть пропуск в вашей PKPassLibrary, -replacePassWithPass работает в первом случае, -removePass и добавление его обратно с помощью PKAddPassesViewController работает в второй.

Обновление пропусков — это всегда замена. Есть в основном три требования, которые вы должны выполнить, чтобы успешно заменить пропуск:

1) проход с тем же идентификатором passTypeIdentifier и серийным номером должен быть уже добавлен в вашу библиотеку PKPassLibrary;

2) новый экземпляр прохода должен иметь хотя бы одно отличие от старого прохода (кроме passTypeIndentifier и serialNumber, которые должны остаться прежними);

3) ваше приложение должно иметь право на проходы с этим идентификатором passTypeIdentifier.

person Yevhen Dubinin    schedule 26.12.2012