[英]Error Passbook - PKZip signature
我運行代碼,如下所述。 當我收到文件(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];
}
}
假設您嘗試使用來自connectionDidReceiveData方法的NSData對象,這是錯誤的。 您應該累積NSData對象,直到connectionDidFinishLoading。
你應該做這樣的事情:
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
if (self.passData != nil) {
[self.passData appendData:data];
}
else {
self.passData = [NSMutableData dataWithData:data];
}
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSError *error;
PKPass *pass = [[PKPass alloc] initWithData:self.passData error:&error];
//add pass
self.passData = nil;
}
問題就在於此
//init a pass object with the data
PKPass *pass = [[PKPass alloc] initWithData:data error:&error];
下載的數據已損壞。
如果您能夠通過電子郵件/ Safari添加傳遞,則問題是由NSData對象引起的。
在我的例子中,pkpass文件base64字符串值在我轉換為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");
}
希望這可以幫助!!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.