IOS PASSBOOK — ошибка при создании нескольких PKPass для Passbook

Я работаю над функцией сберегательной книжки для создания посадочного талона в iOS, я могу создать один посадочный талон, и он работает хорошо, но при попытке создать несколько посадочных талонов я получаю следующие проблемы:

  1. Я могу получить подсчет, но все проходы заменяются последним во время ПРОСМОТРА.

  2. После выбора СОХРАНИТЬ ВСЕ в приложении сберегательной книжки есть только один проход, т.е. последний.

Я использую следующий код, чтобы показать проходы

-(void) initializeWithMultiPassbookArray:(NSMutableArray *)arrPasses
{
    NSMutableArray *arrPKPass = [[NSMutableArray alloc] init];

    for(NSString *path in arrPasses)
    {
        NSData *data;

        if(path && path.length)
        {
            data = [[NSData alloc] initWithContentsOfFile:path];

            NSError *error;

            PKPass *passSample = [[PKPass alloc] initWithData:data error:&error];

            if(passSample)
            {
                [arrPKPass addObject:passSample];
                passSample = nil;
            }
            else
                JALog(@"passSample is nil");
        }
        else
        {
            JALog(@"Error occured while fetching pkpass data from cache path");
        }
    }

    if(arrPKPass && arrPKPass.count > 1)
    {
        if(!self.passLibrary)
            self.passLibrary = [[PKPassLibrary alloc] init];

        __weak BookingSuccessfulViewController *self_ = self;
        if(viewPopUpBg)
        {
            [viewPopUpBg removeFromSuperview];
            viewPopUpBg = nil;
        }
        [self.passLibrary addPasses:arrPKPass withCompletionHandler:^(PKPassLibraryAddPassesStatus status) {

            switch (status) {
                case PKPassLibraryDidAddPasses:
                {
                    [App_Delegate performSelectorOnMainThread:@selector(RemoveLoader) withObject:nil waitUntilDone:YES];
                    if([self_ respondsToSelector:@selector(showAlertFor:withMsg:withTag:)])
                        [self_ showAlertFor:SAVED withMsg:@"Your booking details have been added to Passbook." withTag:0];
                    break;
                }
                case PKPassLibraryDidCancelAddPasses:
                {

                    [App_Delegate performSelectorOnMainThread:@selector(RemoveLoader) withObject:nil waitUntilDone:YES];

                    break;
                }
                case PKPassLibraryShouldReviewPasses:
                {
                    //[self_ performSelectorOnMainThread:@selector(RemoveLoader) withObject:nil waitUntilDone:YES];
                    [App_Delegate performSelectorOnMainThread:@selector(RemoveLoader) withObject:nil waitUntilDone:YES];


                    PKAddPassesViewController *vcPKAddPass = [[PKAddPassesViewController alloc] initWithPasses:arrPKPass];
                    [vcPKAddPass setDelegate:(id)self_];
                    [self_ presentViewController:vcPKAddPass animated:YES completion:nil];
                    vcPKAddPass = nil;
                    break;
                }
                default:
                    break;
            }

        }];
    }
    else if(arrPKPass.count == 1)
    {
        if(viewPopUpBg)
        {
            [viewPopUpBg removeFromSuperview];
            viewPopUpBg = nil;
        }

        [App_Delegate performSelectorOnMainThread:@selector(RemoveLoader) withObject:nil waitUntilDone:YES];

        PKPass *passLocal = [arrPKPass objectAtIndex:0];

        if(passLocal)
        {
            self.currentPass = passLocal;

            //present view controller to add the pass to the library
            PKAddPassesViewController *vcPKAddPass = [[PKAddPassesViewController alloc] initWithPass:passLocal];
            [vcPKAddPass setDelegate:(id)self];
            [self presentViewController:vcPKAddPass animated:YES completion:nil];
            vcPKAddPass = nil;
        }
    }
    else
    {
        JALog(@"arrPKPass is nil");
    }
}

person Abhishek Sinha    schedule 07.08.2015    source источник
comment
Вы уверены, что arrPasses содержит уникальные пути и не является массивом, содержащим один и тот же путь несколько раз?   -  person PassKit    schedule 07.08.2015
comment
Да, у всех разные пути. Я думаю, что должен быть один ключ, который должен быть разным для каждого прохода. Сейчас я пытаюсь использовать ключ serialNumber при создании JSON.   -  person Abhishek Sinha    schedule 07.08.2015


Ответы (1)


Получил мой ответ:

Каждый проход должен содержать разные серийные номера в ключе «serialNumber» при создании JSON.

Также проверьте возможности в Project>Target>Capabilities>Passbook.

Параметр Разрешить подмножество типов проходов выбран с определенными идентификаторами.

Эти шаги сработали для меня.

Надеюсь помочь и другим.

Спасибо

person Abhishek Sinha    schedule 11.08.2015