项目中遇到的问题及解决思路

有时遇到一个小问题,但不知道解决方法,就晕死。最近就遇到了两个,开始头大,后来解决了,其实发现也没那么复杂,不过还是记录下来,以便以后遇到这样的问题,可以有所参考。

   第一个问题,就是前段时间做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];

}

昨天又遇到了一个棘手的问题,就是应用开发时,有时候我们未注意,便用同步便写了,但是其实会出现很多问题。假设我项目中就遇到了问题,我在创建界面时先
调用了

    [[iPhonePlayer sharedIVMallPlayer]IVMallPlayerInit:@"nil":@"nil"];

然后方法里面有个

     NSString *strURL=[NSString stringWithContentsOfURL:[NSURL URLWithString:str] encoding:NSUTF8StringEncoding error:nil];

 ret=PRODRM_Init();

当然我在开发时没什么问题,但是当我域名写错了时,开发也没什么问题,就是界面上未显示数据吧,但是当我打包后,安装在手机上时,却老是崩溃,刚开始时,让我百思不得其解,后来看了下手机的崩溃日志后,才发现是未完成创建界面便崩溃了,具体原因是,因为前面两条语句,域名写错,而两者又是同步,造成长时间阻塞,最后导致其被系统杀死,造成崩溃的假象。改了下便好了。

 dispatch_async(dispatch_get_global_queue(0, 0), ^{

        

         NSString *strURL=[NSString stringWithContentsOfURL:[NSURL URLWithString:str] encoding:NSUTF8StringEncoding error:nil];

           ret=PRODRM_Init();

        dispatch_async(dispatch_get_main_queue(), ^{

        

            if (strURL==nil) {

                NSLog(@"nil");

                

            }else{

                NSDictionary *result=[NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:nil];

                NSLog(@"aio%@",result);

            }

            

        

        });

改成了上述语句,便不会发生崩溃现象了。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Java 开发项目过程,可能会遇到以下问题,我提供一些解决思路/方法和具体行动项: 1. 技术难点问题:可以通过技术研究、寻求专家帮助、尝试新的技术方案等方式解决。 2. 代码质量问题:可以通过代码审查、代码规范化、重构等方式提高代码质量。 3. 项目进度延误问题:可以通过调整项目计划、加强团队协作、加强沟通等方式解决。 4. 问题排查问题:可以通过日志分析、调试工具使用、代码重构等方式解决。 5. 代码冲突问题:可以通过版本控制工具、代码合并工具等方式解决。 6. 测试问题:可以通过编写完善的测试用例、使用测试工具等方式提高测试效率和测试质量。 7. 安全问题:可以通过加强安全性评估、加强代码审查、加强安全性措施等方式提高安全性。 具体行动项包括: 1. 研究新技术:在遇到技术难点时,可以寻求专家帮助或者尝试新的技术方案。 2. 代码审查:定期进行代码审查,发现并改正代码质量问题。 3. 重构:对于代码质量较差的模块进行重构,提高可重用性和可维护性。 4. 调整项目计划:针对进度延误问题,调整项目计划,加强团队协作和沟通。 5. 日志分析:对于问题排查问题,使用日志分析工具进行分析。 6. 版本控制:使用版本控制工具,解决代码冲突问题。 7. 测试用例编写:编写完善的测试用例,提高测试效率和测试质量。 8. 安全性评估:加强安全性评估,发现并解决安全问题。 总之,Java 开发项目过程,需要及时发现和解决问题,保证项目的顺利开展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值