1

現在、Google アナリティクスの最新バージョン (v2.0) を使用しています。

appDelegate で最も一般的な方法でインスタンス化します。

[GAI sharedInstance].trackUncaughtExceptions = NO;
[GAI sharedInstance].dispatchInterval = 0;
[[GAI sharedInstance] trackerWithTrackingId:@"..."];

しかし、アプリを実行していると、ログに次の例外が継続的に生成されます。

An observer of NSManagedObjectContextDidSaveNotification illegally threw an exception.  Objects saved = {
    deleted = "{(\n    <GAIHit: 0xc1cac50> (entity: GAIHit; id: 0xc160740 <x-coredata://8854889C-BE6C-49BB-BBA9-99465B86265E/GAIHit/p26> ; data: {\n    dispatchUrl = \"https://ssl.google-analytics.com/collect\";\n    gaiVersion = \"2.0b4\";\n    parametersData = <62706c69 73743030 d4010203 04050852 53542474 6f705824 6f626a65 63747358 24766572 73696f6e 59246172 63686976 6572>;\n    timestamp = \"2013-07-10 10:21:55 +0000\";\n})\n)}";
    inserted = "{(\n)}";
    updated = "{(\n)}";
} and exception = Object's persistent store is not reachable from this NSManagedObjectContext's coordinator with userInfo = (null)

アプリケーションがクラッシュすることはありませんが、非常に冗長で、ログが汚染されます。

さらに、GAログには次のように記載されているため、機能しているようです。

-[GAIDispatcher dispatchComplete:withStartTime:withRetryNumber:withResponse:withData:withError:] (GAIDispatcher.m:415) DEBUG: Successfully dispatched hit /GAIHit/p51 (0 retries).

これらのログを停止するアイデアはありますか?

4

2 に答える 2

4

GAM のドキュメントから:

アプリが CoreData フレームワークを使用している場合: Google アナリティクス CoreData オブジェクトからの通知 (NSManagedObjectContextDidSaveNotification など) に応答すると、例外が発生する場合があります。代わりに、Apple は、マネージド オブジェクト コンテキストをパラメーターとしてリスナーに指定して、CoreData 通知をフィルタリングすることをお勧めします。詳細については、Apple にお問い合わせください。

私はそれがあなたの場合だと思います

于 2013-07-10T10:52:45.560 に答える
0

サードパーティ ライブラリによって作成された他のコンテキストからではなく、管理オブジェクト コンテキストからのみ変更をマージする必要があります。

ただし、コンテキストによるフィルタリングは、すべてのバックグラウンド コンテキストのリストをどこかに保存することを意味します。より簡単な解決策を見つけました。コンテキストをコンテキストのリストと比較する代わりに、コンテキストが PersistentStoreCoordinator 用に作成されたかどうかを確認するだけで十分です。

- (void) managedObjectContextDidSaveNotification: (NSNotification *) notification {
    NSManagedObjectContext * context = notification.object;
    if (context != self.managedObjectContextForMainThread) {
        if (context.persistentStoreCoordinator == self.persistentStoreCoordinator) {
            [context mergeChangesFromContextDidSaveNotification:notification];
        }
    }
}
于 2015-01-02T09:30:35.267 に答える