Omniture App Measurement для iphone, получая проблемы, когда приложение выходит на задний план
Чтобы реализовать отслеживание Omniture в приложении для iPhone, я загрузил программное обеспечение AppMeasurement с SiteCatalyst(AppMeasurement.h,libAppMeasurement.a,libAppMeasurementNoThumb.a).
Я использую библиотеку приложений для iPhone от Omniture, связал библиотеки релизов и разработчиков. Я создаю их экземпляр, используя метод singleton (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'
Экземпляр "AppMeasurement" становится нулевым или пустым, когда приложение переходит в фоновый режим и выходит на передний план, но я не могу выяснить, является ли это проблемой библиотеки iPhone Site Analyst или проблемой кодирования.
Чтобы справиться с аварией, я сделал нулевую проверку, но она не попадает под нулевой случай.
Помогите мне разобраться с пустой проверкой экземпляра AppMeasurement и узнать, почему экземпляр AppMeasurement становится пустым, когда приложение переходит в фоновый режим и выходит на передний план.
Спасибо
2 ответа
Наконец-то я разобрался с вещами. Извините за все неудачи.
Все, что я делаю, - это использую стороннюю библиотеку для реализации приложения Omniture Tracking for iPhone, которое предоставляется самим Site Catalyst.
Ниже приведен URL-адрес библиотеки: библиотека Site Catalyst Omniture предназначена для приложений, разработанных для всех устройств iOS, включая iPhone, iPad и 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::("")::
Видя это, я думаю, что это случай ПУСТОЙ ИНСТАНЦИИ. Как проверить этот случай? Это не проверка под нулевой проверкой.
Этот код беспорядок; Трудно сказать, что не так по причинам, указанным в комментариях к вашему вопросу.
ни один метод не должен иметь префикс
get
если это не очень особый типbeginTracking
утечки все, что назначеноs
Так... s
присваивается экземпляру NSArray либо из-за плохо названного getInstance
возвращает NSArray, или вы перевыпускаете этот объект.