0

iPhoneアプリケーションにOmnitureTrackingを実装するために、SiteCatalyst(AppMeasurement.h、libAppMeasurement.a、libAppMeasurementNoThumb.a)からAppMeasurementソフトウェアをダウンロードしました。

Omnitureのアプリ測定iphoneライブラリを使用しており、リリースライブラリと開発ライブラリをリンクしています。シングルトンメソッド(getInstance)を使用してそれらをインスタンス化します。以下のように実装

#import "OmnitureTracking.h"
#import "AppMeasurement.h"

AppMeasurement *s = nil;


@implementation OmnitureTracking

+ (void)beginTracking {
s  = [[AppMeasurement getInstance] retain];
s.account = @"";
s.debugTracking = YES;
}

AppDelegateでこの「beginTracking」を呼び出して追跡を開始します。ページ追跡では、次のような別のメソッドを実装しました。

+ (void)trackViewForPage:(NSString *)pageName {
NSLog(@"trackViewForPage::s instance::%@::",s);
if (s == nil)
return;

[s clearVars];
[s track:[NSDictionary dictionaryWithObjectsAndKeys:pageName, @"pageName", nil]];
}

実装は正常に機能し、ログを下回ります。

2012-06-21 01:53:20.953 MyApp[857:607] App Measurement Library compile time = Aug  4 2011 16:29:52
2012-06-21 01:53:21.418 MyApp[857:607] trackViewForPage::s instance::<AppMeasurement: 0x28c4b0>::
2012-06-21 01:53:21.795 MyApp[857:607] 
Omniture App Measurement Debug: http://MyApp.net/b/ss/MyAppiosappdev/0/OIP-2.1.2/s2253418?AQB=1&ndh=1&t=21/5/2012%205%3A53%3A20%204%20240&vid=01398194867219045&ce=UTF-8&pageName=MyApp%201.2%20%281.2%29%20Launch&ts=2362139876678&events=event7%2Cevent5&c1=D%3Dv2&c2=D%3Dv6&c3=D%3Dv11&v2=MyApp%201.2%20%281.2%29&v4=0&v5=0&v6=20&v7=5&v8=Thursday&v9=4.3.3&v12=D%3Dv3&v13=D%3Dv3&s=320x480&c=24&AQE=1

しかし、アプリがバックグラウンドになり、フォアグラウンドに入ると、以下のように追跡してログを取得するため、アプリがクラッシュします。

Jun 21 03:07:41 unknown MyApp[467] <Warning>: trackViewForPage::s instance::(
    ""
)::
Jun 21 03:07:41 unknown MyApp[467] <Error>: -[__NSCFArray clearVars]: unrecognized selector sent to instance 0x28c4b0
Jun 21 03:07:41 unknown MyApp[467] <Error>: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray clearVars]: unrecognized selector sent to instance 0x28c4b0'

アプリがバックグラウンドになりフォアグラウンドに入ると、「AppMeasurement」インスタンスがゼロまたは空になりますが、サイトアナリストのiPhoneライブラリの問題なのかコーディングの問題なのかわかりません。

クラッシュを処理するために、nilチェックを実行しましたが、nilの場合には該当しません。

「AppMeasurement」インスタンスの空のチェックと、アプリがバックグラウンドになってフォアグラウンドに入るときに「AppMeasurement」インスタンスが空になる理由を理解するのを手伝ってください。

ありがとう

4

2 に答える 2

1

最後に、私は物事を理解しました。すべての事故をお詫び申し上げます。

私が行っているのは、サード パーティのライブラリを使用して、Site Catalyst 自体が提供する iPhone アプリケーション用の Omniture Tracking を実装することだけです。

ライブラリについては、以下の URL を参照してください : Site Catalyst Omniture ライブラリは、iPhone、iPad、iPod Touch を含むすべての iOS デバイス向けに開発されたアプリを対象としています。

ライブラリ自体に問題があり、多くのメモリ管理の問題があります。

彼らは、メモリリークを修正した新しいライブラリを提供しました。

問題を修正するために新しいライブラリをアップロードしました。

PropertyOmnitureTracking.mの設定中に、サポート クラス - で問題が発生しました。AppMeasurement.h

//Use best practices plugin
s.useBestPractices = YES;

このプロパティにより、アプリがアクティブな状態になると、つまり起動するたびにオムニチャー トラッキングが呼び出されます。ライブラリにはメモリ管理の問題があるため、アプリがバックグラウンドになってフォアグラウンドになると、アプリがクラッシュします。

返信ありがとうございます。

しかし、まだ私を悩ませていることの1つは、クラスの空のインスタンスをチェックする方法です

インスタンスが存在する場合、NSLog に

2012-06-21 01:53:21.418 MyApp[857:607] trackViewForPage::s instance::<AppMeasurement: 0x28c4b0>::

しかし、エラーの場合、NSLog でインスタンスを次のように取得します。

Jun 21 03:07:41 unknown MyApp[467] <Warning>: trackViewForPage::s instance::("")::

それを見ると、EMPTY INSTANCE の場合だと思います。このケースを確認するにはどうすればよいですか?nil チェックでチェックしていません。

于 2012-06-28T07:39:10.340 に答える
0

そのコードはめちゃくちゃです。あなたの質問へのコメントに記載されている理由のために何が悪いのかを言うのは難しいです。

  • get非常に特殊なタイプでない限り、メソッドの前にプレフィックスを付けることはできません。

  • beginTracking割り当てられているものは何でもリークしますs

つまり、名前が不適切な場合にNSArrayが返されるか、そのオブジェクトを過剰にリリースしているために、 ...sがNSArrayインスタンスに割り当てられています。getInstance

于 2012-06-21T16:40:28.770 に答える