京公网安备 11010802034615号
经营许可证编号:京B2-20210330
项目中遇到的问题及解决思路
有时遇到一个小问题,但不知道解决方法,就晕死。最近就遇到了两个,开始头大,后来解决了,其实发现也没那么复杂,不过还是记录下来,以便以后遇到这样的问题,可以有所参考。
第一个问题,就是前段时间做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数据分析师 出品 作者:李诗怡 1. IF:基础条件判断(最常用) 作用:根据指定条件的真(TRUE)或假(FALSE),返回两种不同 ...
2026-10-30“不限专业可以考的证书”这个搜索词背后,通常藏着一个很实际的担心:专业不对口,想考个证拓宽出路,但怕报了名才发现有专业限 ...
2026-10-30先回答:能考的多是技能实操类证书 40岁、初中学历,能报的证书主要集中在四类:职业技能等级证书、专项职业能力证书、特种作业 ...
2026-10-3030岁考什么证好找工作,没有一张“通用答案”。同样的证书,对有行业经验的人和准备跨行的人,价值完全不同。更实际的思路是:先 ...
2026-10-30“专业职业技术资格证书”并不是一个正式名称,而是把好几种证书混在一起的口语说法。有人用它指会计、经济这类职称考试,有人指 ...
2026-10-30大学生能考的证书,大致分四类:通用基础类、职业资格类、专业技术资格类、岗位技能与行业认证类。真正要解决的问题不是“还有哪 ...
2026-10-30“需要考哪些证书”这个问题,没有统一答案。因为“需要”至少分三种:有的证书是入职准入,没有它连岗位门槛都进不去;有的证书 ...
2026-10-30“现在什么证含金量高好考一些”,这个问题里其实藏着两个容易打架的条件。含金量高的证书,往往有报考门槛、考试周期长;好考的 ...
2026-10-30“现在考什么证最吃香”,这个问题本身藏着一个容易踩的坑:不同人说“吃香”,指的往往不是同一件事。有人指考的人多、话题热; ...
2026-10-30文凭低,不等于没证可考,但选择空间确实窄一些。学历门槛明确的准入类资格,比如部分教师资格、法律职业资格、执业医师等,通常 ...
2026-10-30土建专业的大学生问“考什么证”,最容易踩的坑是把注册类证书当成在校目标。注册建造师、注册造价工程师、注册结构工程师、监理 ...
2026-10-30中年男人考证书,最怕两件事:一是年龄、学历卡在报名门槛外,白准备半年;二是考完发现岗位用不上,钱和时间都打了水漂。所以顺 ...
2026-10-30大专学历能考的证书不少,但真正值得投入时间的,是先确认“能不能报”,再看“考了对应什么岗位”。很多证书的报考条件里写着本 ...
2026-10-30“十大建议考的证书”这个问题,很难有一份对所有人都成立的名单。同一张证书,对会计专业大三学生、想转行做数据分析的运营、以 ...
2026-10-30“什么证书有用含金量高”这个问题,很难用一张榜单回答。同一本证书,对想进医院的人可能是硬门槛,对做运营的人却用不上;对已 ...
2026-10-30在职成年人问“考什么证书有用”,先要弄清自己需要哪一种“有用”。同一张证书,对想进入准入行业的人、想在本岗晋升的人、想转 ...
2026-10-30“女生能考的证书”真正要先回答的是“你现在的条件能报什么”。学历、专业、工作年限、是否在校、所在地区政策,直接决定你能不 ...
2026-10-30“女孩考什么证书比较好”这句话里,“比较好”其实藏着三种完全不同的标准:好考,看的是报考门槛低、备考周期短;好就业,看的 ...
2026-10-30先给结论:市场岗位没有一张通吃的证书。品牌传播、数字营销与投放、用户增长、用户研究、营销数据分析,这五条路径对应的工作任 ...
2026-10-30经济学专业考什么证书,没有统一答案。经济学毕业后去向很散:有人进银行、证券、基金,有人做财务审计,有人转数据分析与经营分 ...
2026-10-30