我很简单地尝试在将Pass添加到存折时收到通知。
有一点需要注意的是,我还试图使用我使用与我的应用程序使用不同的苹果开发帐户生成的通行证。我想弄清楚这是不是问题的一部分。
这是3-tab应用程序中的一个VC。
ViewController.m:
@interface ViewController ()
{
PKPassLibrary *_passLibrary;
NSArray *_passes;
}
@end
“viewDidLoad中”:
- (void)viewDidLoad
{
//init passbook
_passLibrary = [[PKPassLibrary alloc] init];
_passes = [_passLibrary passes];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(passLibraryDidChange:) name:PKPassLibraryDidChangeNotification object:_passLibrary];
}
和我的通知处理程序:
- (void)passLibraryDidChange:(NSNotification *)notification
{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"%@", @"passes added");
});
}
当我在iOS模拟器中运行应用程序时,一切都按预期工作,我可以在Xcode中看到日志输出到控制台。
当我在设备上运行时,添加Pass时不会调用通知。在设备上,我甚至无法列出任何通行证。
更奇怪的是,当我从存折中删除Pass,然后重新进入应用程序时,将会调用通知。
ps:我真的希望这里有一些简单的东西。编辑:更新了更多信息和更完整的代码示例
答案 0 :(得分:0)
您似乎没有保留PKPassLibrary实例的句柄。在UIViewController子类上创建一个强大的@property。 Alloc +初始化属性并配置在viewDidLoad中监听的通知(因此它只会完成一次)。
在UIApplication上设置它可能更合适,但这取决于应用程序逻辑以及ViewController如何适合您的UI(例如,当您仍需要访问PassKit通知时,它是否会被替换或释放?) ...
尼克。
P.S。您是否明确地在GCD主队列上进行NSLogging的任何原因?这只是从一些UI反馈中遗留下来的吗?
P.P.S。在您重新进入应用程序时看到通知非常有意义,因为当调用viewWillAppear时,新的PKPassLibrary实例将立即触发正在等待的通知。不知道为什么它在模拟器中起作用 - 必须是偶然的。
答案 1 :(得分:0)
归结为从配置文件来自的相同源创建了传递类型标识符。
然后,我必须使用新的Pass Certificates并将它们添加到我的钥匙串中,然后使用新的传递类型标识符重新创建实际的传递。
同时,在Xcode ..在Entitlements部分中我的目标的摘要部分,我可以刷新通行证并看到新的通行证类型ID进来。
应用程序运行后,我现在可以正确通知任何更改(添加/减少/等)。
我还需要确保我的_passLibrary被正确保留。