4

以下に概説するように、コードを実行します。ファイル (NSData) を取得すると、次のエラーが表示されます。

"BOM could not extract archive: Couldn't read PKZip signature"

何が起こっている?誰かがこの問題を抱えていましたか? どうすれば修正できますか?

    NSString *url = [res objectForKey:@"url"];

    NSData *data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:url]];    if (nil != data) {

    //init a pass library
    PKPassLibrary* passLib = [[PKPassLibrary alloc] init];

    NSError *error;

    //init a pass object with the data
    PKPass *pass = [[PKPass alloc] initWithData:data error:&error];

    if(error) {

    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"OK"otherButtonTitles:nil];
    [alertView show];

    }

    //check if pass library contains this pass already
    if([passLib containsPass:pass]) {

        //pass already exists in library, show an error message
        UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"Pass Exists" message:@"The pass you are trying to add to Passbook is already present." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alertView show];

    } else {

        //present view controller to add the pass to the library
        PKAddPassesViewController *vc = [[PKAddPassesViewController alloc] initWithPass:pass];
        [vc setDelegate:(id)self];
        [self presentViewController:vc animated:YES completion:nil];
    }
}
4

3 に答える 3

0

電子メール/Safari 経由でパスを追加できる場合、問題は NSData オブジェクトが原因です。

私の場合、pkpass ファイルの base64 String 値は、NSData オブジェクトに変換したデバイスで受信されました。PKPass オブジェクトはパスを読み取ることができました。以下は私が使用したコードです:

// dictionary contains base64string values of the pkpass file.
for (NSString *key in [dictionary allKeys])
{
    NSError *error;
    NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:[dictionary valueForKey:key] options:0];
    NSString *decodedString = [[NSString alloc] initWithData:decodedData encoding:NSUTF8StringEncoding];

    PKPass *pass = [[PKPass alloc] initWithData:decodedData error:&error];
    [arrPasses addObject:pass];

}
if ([arrPasses count] > 0)
{
    PKAddPassesViewController *vc = [[PKAddPassesViewController alloc] initWithPasses:arrPasses];
    [self presentViewController:vc animated:YES completion:nil];
}
else
{
    NSLog(@"Passes not found");
}

お役に立てれば!!

于 2015-05-20T08:57:47.763 に答える
0

問題はラインにあります

//init a pass object with the data
    PKPass *pass = [[PKPass alloc] initWithData:data error:&error];

ダウンロードしたデータが壊れています。

于 2015-03-27T07:49:01.117 に答える