熱線電話:13121318867

登錄
首頁精彩閱讀項目中遇到的問題及解決思路
項目中遇到的問題及解決思路
2017-12-22
收藏

項目中遇到的問題及解決思路

有時遇到一個小問題,但不知道解決方法,就暈死。最近就遇到了兩個,開始頭大,后來解決了,其實發現也沒那么復雜,不過還是記錄下來,以便以后遇到這樣的問題,可以有所參考。

第一個問題,就是前段時間做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

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢