
項目中遇到的問題及解決思路
有時遇到一個小問題,但不知道解決方法,就暈死。最近就遇到了兩個,開始頭大,后來解決了,其實發現也沒那么復雜,不過還是記錄下來,以便以后遇到這樣的問題,可以有所參考。
第一個問題,就是前段時間做DRM做視頻的解密,就遇到了一個棘手的問題。我們DRM的流程大體是這樣的,就是說,安裝該APP時,終端會為DRM提供一個特定的序列號,DRM就會注冊這個序列號,當發現這個序列號以前沒有注冊過后,第一次調用初始化接口后,DRM就會為這個應用寫一段數據,當下次啟動時,再次初始化時,DRM端就會檢測該序列號是否被注冊過,如果不是,當然會寫數據,但是如果是,就會再原來寫數據的位置讀數據。如果讀到的話,就會初始化成功,然后就可以拿key播放了。
那么,現在問題就來了,大家知道,我們寫數據的時候,一般都是獲得應用底下的路徑。然后往里面寫數據,比如,我原來是這么寫的
//寫數據。
//存儲到應用的私有文件中
// NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// NSString *documentsDirectory = [paths objectAtIndex:0];
// NSLog(@"document paths = %@",documentsDirectory);
// NSString *fileName = [@"drmLibFile" stringByAppendingFormat:@"%hhu",BlockID];
// NSString *filePath = [documentsDirectory stringByAppendingPathComponent:fileName];
// NSLog(@"%@",filePath);
// NSFileManager *fileManager = [NSFileManager defaultManager];
// if ([fileManager fileExistsAtPath:filePath]) {
// [fileManager createFileAtPath:filePath contents:nil attributes:nil];
// }
//
// NSData *fileData = [NSData dataWithBytes:Ptr length:Size];
// [fileData writeToFile:filePath atomically:YES];
讀數據
//從應用保存的私有文件中讀取
// NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// NSString *documentsDirectory = [paths objectAtIndex:0];
// NSLog(@"document paths = %@",documentsDirectory);
// NSString *fileName = [@"drmLibFile" stringByAppendingFormat:@"%hhu",BlockID];
// NSString *filePath = [documentsDirectory stringByAppendingPathComponent:fileName];
// NSLog(@"%@",filePath);
// NSDataReadingOptions *readOption = nil;
// NSError *error = nil;
// NSData *getFileData = [NSData dataWithContentsOfFile:filePath options:&readOption error:&error];
//
// if (getFileData == nil) {
// NSLog(@"error = %@",error);
// return 0;
// }
//
//// NSLog(@"Data from file = %@",getFileData);
//
// //將文件中的數據給移植庫
// if (getFileData.length > 0) {
// printf("getfileData length = %d",getFileData.length);
// memcpy(Ptr, getFileData.bytes, getFileData.length);
// }else{
//
// NSLog(@"getFileData.length == 0");
//
// }
好,現在問題來了,假設我現在把這個應用刪掉啊,就是把DRM寫在應用里的數據也一塊給刪掉了,但是DRM又不知道我把應用給刪掉了。所以下次我再次安裝這個應用時,就會發現,這個應用的加密播放不能播放了。原因很簡單,我把DRM的數據給刪掉了,但是現在DRM初始化時,發現這個序列號被注冊過了,就會不會繼續往這個應用里面寫數據,而是會直接讀數據,而數據早已經被我刪掉了,因此會初始化失敗,此時,就不可以播放加密視頻了。當時想了好久,最后發現只要解決一個問題就行了,就是刪除應用時,不應該刪除DRM刪除的私有數據。
這里就用到了KeyChain前幾篇博客寫過它,挺好用的,我改過后,就發現,刪除應用后,下次安裝應用時仍然可以播放加密視頻。這就說明DRM私有數據未被刪除啊、
然后是第二個問題啊,是原來給香港HKBN寫的項目,在用Xcode6.1編譯打包后,他們測試發現,5s以上會發生白屏。這個程序不是我寫的啊,是以前的同事寫的,而且還是好幾年前寫的,一直沒有改過??雌饋砺闊?,但是還是硬著頭皮看了一遍,初步判定問題,應該是創建界面時出現了問題,但是,我看它寫的代碼本身是不存在問題的,只要創建界面,就會loading,因為是xib,但是,就是沒有loading,直接白屏。
后來突然想到了一個方法,既然是創建界面出現了問題,是不是我可以再每次程序從后臺到前臺時,重新加載一次界面不就可以了嗎
然后在appdelegate里面在這個函數,重新創建和加載界面就可以了。
- (void)applicationWillEnterForeground:(UIApplication*)application {
/*
Called as part of transition from the background to the inactive state: here you can undo many of the changes made on entering the background.
*/
NSLog(@"enterForeground");
[selfreloadTabPage];
[selfcreateInterface];
}
[[iPhonePlayersharedIVMallPlayer]IVMallPlayerInit:@"nil":@"nil"];
然后方法里面有個
NSString*strURL=[NSStringstringWithContentsOfURL:[NSURLURLWithString:str]encoding:NSUTF8StringEncodingerror:nil];
ret=PRODRM_Init();
當然我在開發時沒什么問題,但是當我域名寫錯了時,開發也沒什么問題,就是界面上未顯示數據吧,但是當我打包后,安裝在手機上時,卻老是崩潰,剛開始時,讓我百思不得其解,后來看了下手機的崩潰日志后,才發現是未完成創建界面便崩潰了,具體原因是,因為前面兩條語句,域名寫錯,而兩者又是同步,造成長時間阻塞,最后導致其被系統殺死,造成崩潰的假象。改了下便好了。
dispatch_async(dispatch_get_global_queue(0,0), ^{
NSString*strURL=[NSStringstringWithContentsOfURL:[NSURLURLWithString:str]encoding:NSUTF8StringEncodingerror:nil];
ret=PRODRM_Init();
dispatch_async(dispatch_get_main_queue(), ^{
if(strURL==nil) {
NSLog(@"nil");
}else{
NSDictionary*result=[NSJSONSerializationJSONObjectWithData:[strdataUsingEncoding:NSUTF8StringEncoding]options:NSJSONReadingMutableContainerserror:nil];
NSLog(@"aio%@",result);
}
});
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
CDA數據分析師證書考試體系(更新于2025年05月22日)
2025-05-26解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25