0

通帳にパスが追加されたときに通知を受け取ろうとしているだけです。

注意すべきことの 1 つは、アプリが使用しているものとは異なる Apple dev アカウントを使用して生成したパスも使用しようとしていることです。それが問題の一部であるかどうかを把握しようとしています。

これは 3 タブ アプリケーションの 1 つの 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 のコンソールにログ出力が表示されます。

デバイスで実行すると、パスが追加されたときに通知が呼び出されません。デバイスでは、パスをリストすることさえできません。

さらに奇妙なのは、通帳からパスを削除してアプリに再度入ると、通知が呼び出されることです。

ps:ここに欠けているのは単純なものであることを本当に願っています。

EDIT:より多くの情報とより完全なコードサンプルで更新

4

2 に答える 2

0

最終的には、プロビジョニング プロファイルと同じソースからパス タイプ識別子を作成することになりました。

次に、新しいパス証明書を取得してキーチェーンに追加し、新しいパス タイプ識別子を使用して実際のパスを再作成する必要がありました。

一方、Xcode では、[資格] セクションのターゲットの概要セクションで、パスを更新し、新しいパス タイプ ID が入っていることを確認できます。

アプリが実行されると、変更 (加算/減算など) が適切に通知されるようになりました。

また、_passLibrary が適切に保持されていることを確認する必要もありました。

于 2013-01-11T21:00:15.510 に答える
0

PKPassLibrary インスタンスへのハンドルを保持していないようです。UIViewController サブクラスに強力な @property を作成します。プロパティを Alloc+Init し、viewDidLoad でリッスンする通知を構成します (一度だけ実行されます)。

UIApplication のどこかにこれを設定する方が適切かもしれませんが、それはアプリのロジックと、ViewController が UI にどのように適合するかによって異なります (たとえば、PassKit 通知へのアクセスがまだ必要なときに、ViewController が置き換えられたり解放されたりしますか?)...</ p>

ニック。

PS GCDメインキューで明示的にNSLoggingしている理由は何ですか? それは、UI フィードバックから取り残されたものですか?

PPS アプリを再起動したときに通知が表示されるのは完全に理にかなっています。なぜなら、そのときに viewWillAppear が呼び出され、新しい PKSsLibrary インスタンスが待機中の通知をすぐに起動するからです。シミュレーターで機能した理由がわからない - 偶然に違いない.

于 2013-01-11T16:28:40.203 に答える