参考:http://blog.csdn.net/pz789as/article/details/52823985
1、今天接入驰声语音库,发现了一个解决不了的警告:
RCTBridge required dispatch_sync to load xxxxx. This may lead to deadlocks
Required dispatch_sync to load constants for xxxxx. This may lead to deadlocks
后面发现是因为模拟器接入浏览器调试才会出现,如果不适用浏览器调试,就不会弹出这个警告。
2、录音和播放的错误,这两个一起使用的时候,录音启动失败,调用AudioQueueStart 返回-50,这是因为AVAudioSession重复了,需要重新设置。
在调用AudioQueueStart之前,调用下面的程序就可以解决了。
AVAudioSession * session = [AVAudioSession sharedInstance];
if (!session) printf("ERROR INITIALIZING AUDIO SESSION! \n");
else{
NSError* nsError;
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&nsError];
if (nsError) {
NSLog(@"couldn't set audio category!");
}
[session setActive:YES error:&nsError];
if (nsError) {
NSLog(@"AudioSession setActive = YES failed");
}
}
3、RCT_REMAP_METHOD的使用,要注意如果是两个函数名不同,但是参数是一样的,就会出错:
RCT_REMAP_METHOD(getPcmCurrentTime,
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)
{
resolve([[NSNumber alloc]initWithDouble:[_pcmPlayer getCurrentTime]]);
}
RCT_REMAP_METHOD(initPcm,
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)
{
resolve([[NSNumber alloc]initWithDouble:[_pcmPlayer getCurrentTime]]);
}
上面这样不行,以下情况可以使用:
只要是参数数量不同,或者参数数量一样,参数名字不一样就可以。
与参数类型无关,类型不同,其他一样是不行的。
4、关于字符串:平时字符串拼接时直接使用+或者format之类的,最近发现有个很好的方法,使用“`${}`”表达式。
如:
var w = 100;
var text = `based width is: ${w}`;
输出得到的结果就是 "based width is: 100"
5、关于RN原生模块的命名问题,2016年11月14号在做一个twitter登陆时,自定了一个原生模块,然后命名为RCTTwitter,其他都按照官网的设置,然后在JS端调用时,无法检测到该模块。在试了一天,排查所有错误后,自己重新建了一个不带RCT前缀的原生模块类,结果导出之后可以找到!~~
由此个人推断:在创建自定义原生模块时,命名一定要注意,不能带RCT前缀。RCT前缀适用于原生View,搭配RCT***Manager一起使用,可能是RN内部设置。
6、在实际开发中,IOS使用模拟器调试时,经常按cmd+R键进行重新load操作。但是有时候按的不对时,就会按到cmd+T键,如果在不知情的情况下,你将会看到模拟器运行起来特别的卡顿,这是为什么呢?经过我自己的排查,终于发现问题所在!原来就是按到cmd+T快捷键了,那么这个快捷键是做什么用的呢?我在模拟器的菜单栏里面就找到了这么一个说明:在Debug选项中,第一个就是cmd+T快捷键,“Slow Animations”,从字面意思应该是缓慢的动画,由此就知道了为什么会变慢了~你只要再按一次cmd+T,或者通过菜单栏把那一项勾掉即可!!