当app进入后台时,initure App测量iphone会出现问题

时间:2012-06-21 11:01:40

标签: iphone background adobe-analytics isnullorempty

要在iPhone应用程序中实现Omniture跟踪,我已从SiteCatalyst下载了AppMeasurement软件(AppMeasurement.h,libAppMeasurement.a,libAppMeasurementNoThumb.a)。

我正在使用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;
}

拨打此电话' beginTracking'在AppDelegate中启动跟踪,对于页面跟踪实现了另一种方法如下:

+ (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'

&#34; AppMeasurement&#34;当应用程序进入后台并进入前台时,实例变为零或空,但我无法弄清楚它是否是Site Analyst iPhone Library问题或编码问题。

为了处理崩溃,我已经完成了零检查,但它不属于零情况。

请帮我弄清楚&#34; AppMeasurement&#34;实例空检查和为什么&#34; AppMeasurement&#34;当应用程序进入后台并进入前台时,实例变空。

由于

2 个答案:

答案 0 :(得分:1)

最后,我已经弄明白了。抱歉所有的不幸事件。

我所做的就是使用第三方库来实现由Site Catalyst本身提供的Omniture Tracking for iPhone Application。

请参阅以下网址库: Site Catalyst Omniture library is intended for apps developed for all iOS devices, including iPhone, iPad and iPod Touch

库本身存在问题,它有很多内存管理问题。

他们为新库提供了内存泄漏修复程序。

上传新库以解决问题。

在设置OmnitureTracking.m属性时,在支持课程AppMeasurement.h上遇到了问题:

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

由于此属性,每当应用程序进入活动状态即启动时,都会调用omniture跟踪。由于库存有内存管理问题,当应用程序进入后台并且出现前景时,应用程序会崩溃。

感谢您的回复。

但仍然困扰我的一件事是如何检查类的空实例

如果有实例,则将其作为

进入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::("")::

通过观察,我认为它是空的实例案例。怎么检查这个案子?它没有在零检查下检查。

答案 1 :(得分:0)

那段代码很乱;由于你的问题评论中提到的原因,很难说出了什么问题。

  • 任何方法都不应以get作为前缀,除非它是一种非常特殊的类型

  • beginTracking泄露分配给s的任何内容

所以...... s被分配给一个NSArray实例,因为命名不佳的getInstance正在返回一个NSArray,或者你正在过度释放该对象。