iOS-舊版百度(1.6.2)語(yǔ)音集成和二維碼

UI界面


UI界面



依賴(lài)庫(kù)


iOS 10 開(kāi)始對(duì)隱私權(quán)限更加嚴(yán)格, 如需使用隱私權(quán)限需要在工程的info.plist文件中聲明,如果不聲明程序在調(diào)用隱私權(quán)限(如相機(jī))時(shí)應(yīng)用程序會(huì)崩潰



網(wǎng)絡(luò)請(qǐng)求報(bào)名單

離線(xiàn)打包用戶(hù)需要手動(dòng)添加權(quán)限到打包工程的info.plist文件中,只添加話(huà)筒就可以了 ..


白名單

key可從以下表中獲取,value為彈框提示文字用戶(hù)可隨意添加,類(lèi)型String


權(quán)限名稱(chēng)????????????????????????Key值

通訊錄????????????????????????????NSContactsUsageDescription

麥克風(fēng)????????????????????????????NSMicrophoneUsageDescription

相冊(cè)????????????????????????????????NSPhotoLibraryUsageDescription????????

相機(jī)????????????????????????????????NSCameraUsageDescription

添加圖片到相冊(cè) ? ? ? ????? NSPhotoLibraryAddUsageDescription

持續(xù)獲取地理位置 ? ? ? ? NSLocationAlwaysUsageDescription

使用時(shí)獲取地理位置 ? ? NSLocationWhenInUseUsageDescription

藍(lán)牙????????????????????????????????NSBluetoothPeripheralUsageDescription

語(yǔ)音轉(zhuǎn)文字????????????????????NSSpeechRecognitionUsageDescription

日歷????????????????????????????????NSCalendarsUsageDescription

蘋(píng)果最新的審核規(guī)范要求申請(qǐng)隱私權(quán)限彈框必須要詳細(xì)說(shuō)明獲取該權(quán)限的目的,配置時(shí)請(qǐng)?jiān)敿?xì)說(shuō)明應(yīng)用中使用該權(quán)限的目的

```

//

//? ViewController.m

//? 百度語(yǔ)音

//

//? Created by 裴鐸 on 2018/6/29.

//? Copyright ? 2018年 peiDuo. All rights reserved.

//

#import "ViewController.h"

#import "BDRecognizerViewController.h"

#import "BDRecognizerViewDelegate.h"

#import "BDVoiceRecognitionClient.h"

#import "QRCodeGenerator.h"

@interface ViewController ()

{

? ? //語(yǔ)音界面

? ? BDRecognizerViewController *bdrv;

? ? NSMutableData*allData;

? ? //參數(shù)設(shè)置 key 秘鑰

? ? BDRecognizerViewParamsObject *bdvp;

? ? UILabel*label;

? ? UIImageView *imgV;

}

@end

@implementation ViewController

- (void)viewDidLoad {

? ? [super viewDidLoad];

? ? BDTheme *me = [BDTheme lightGreenTheme];

? ? bdrv = [[BDRecognizerViewController alloc]initWithOrigin:CGPointMake(20, 180) withTheme:me];

? ? bdrv.enableFullScreenMode = YES;

? ? bdrv.delegate = self;

? ? bdvp = [[BDRecognizerViewParamsObject alloc]init];

? ? bdvp.apiKey = @"ANQLQINhgf2TL0gVP5xhNCxm";

? ? bdvp.secretKey = @"c3d5f5f8ac5478e87802431389b2cba7";

? ? // 創(chuàng)建圖片框

? ? imgV= [[UIImageView alloc] initWithFrame:CGRectMake(self.view.frame.size.width/2-100,380,200,200)];

? ? // 添加到主界面

? ? [self.view addSubview:imgV];

? ? //初始化label

? ? [self label];

}

- (void)label{

? ? //初始化label

? ? label = [[UILabel alloc]initWithFrame:CGRectMake(0, 44, self.view.frame.size.width, 100)];

? ? //添加到主視圖

? ? [self.view addSubview:label];

}

- (void)onRecordDataArrived:(NSData*)recordData sampleRate:(int)sampleRate{

? ? [allData appendData:recordData];

}

- (void)onPartialResults:(NSString*)results

{

? ? label.text= results;

}

- (IBAction)shibie:(id)sender {

? ? allData = [[NSMutableData alloc]init];

? ? [bdrv startWithParams:bdvp];

}

- (IBAction)clier:(id)sender {

? ? label.text=nil;

}

- (IBAction)sheng:(id)sender {

? ? // 生成二維碼

? ? UIImage *img = [QRCodeGenerator qrImageForString:label.text imageSize:imgV.frame.size.width];

? ? // 將生成的二維碼賦值給圖片框

? ? imgV.image= img;

}

- (void)didReceiveMemoryWarning {

? ? [super didReceiveMemoryWarning];

? ? // Dispose of any resources that can be recreated.

}

@end

```


錯(cuò)誤信息:unrecognized selector sent to instance

在編寫(xiě)程序的過(guò)程中,即使編譯通過(guò),但是在運(yùn)行的過(guò)程中,偶爾會(huì)有類(lèi)似 unrecognized selector sent to instance 的錯(cuò)誤。該錯(cuò)誤的意思是不能識(shí)別的實(shí)例方法,造成該錯(cuò)誤的原因可能是該實(shí)例的類(lèi)中并沒(méi)有定義要調(diào)用的方法,或者是在調(diào)用該方法前,這個(gè)實(shí)例所在的內(nèi)存空間被釋放而后分配給了其他類(lèi)的實(shí)例變量。

除此之外,在使用第三方靜態(tài)庫(kù)時(shí),也可能導(dǎo)致該問(wèn)題,這是由 OC 的動(dòng)態(tài)性與 UNIX 庫(kù)的靜態(tài)性造成的。對(duì)于 C 程序而言,當(dāng)源代碼經(jīng)過(guò)編譯器編譯后,會(huì)生成許多個(gè)目標(biāo)文件,目標(biāo)文件中可能使用了其他目標(biāo)文件中的類(lèi)及方法,便會(huì)在目標(biāo)文件中產(chǎn)生一個(gè)未定義的符號(hào),而之后,鏈接程序會(huì)根據(jù)這些未定義符號(hào)找到相應(yīng)的目標(biāo)文件,將需要的類(lèi)及方法鏈接到同一個(gè)文件中,這樣最終得到一個(gè)可以執(zhí)行的程序。為了減小執(zhí)行程序的大小,鏈接程序只會(huì)鏈接目標(biāo)文件中未定義的符號(hào),可是在 Objective-C 語(yǔ)言中,其方法是在方法被調(diào)用時(shí)才會(huì)確定,所以編譯程序只會(huì)確定一個(gè)目標(biāo)文件中未定義的類(lèi)符號(hào),而不去生成未定義的方法符號(hào),故而,編譯程序也不會(huì)將需要的方法鏈接到目標(biāo)文件中。

所以,在使用靜態(tài)庫(kù)中的分類(lèi)方法時(shí),因?yàn)槠漕?lèi)已經(jīng)定義過(guò)了,鏈接程序不會(huì)去進(jìn)行鏈接,最終程序在運(yùn)行的過(guò)程中,找不到分類(lèi)中的方法,導(dǎo)致了該錯(cuò)誤的發(fā)生。

為了避免該錯(cuò)誤,需要到 target -> Build Settings 中修改 Other Linker Flags 的值,將其設(shè)置為 -ObjC,該值意在將靜態(tài)庫(kù)中所有的Objective-C 類(lèi)和分類(lèi)都加載到最后的可執(zhí)行文件中。

另外,Other Linker Flags 還可以設(shè)置其他的值:

-all_load 會(huì)將庫(kù)中所有的的目標(biāo)文件都加入到可執(zhí)行文件中,這樣做會(huì)導(dǎo)致一個(gè)問(wèn)題,如果引用了兩個(gè)靜態(tài)庫(kù),而這兩個(gè)靜態(tài)庫(kù)恰好都引用了同一個(gè)第三發(fā)庫(kù),那么會(huì)報(bào)重復(fù)定義的錯(cuò)誤 duplicate symbol。

-force_load 該值與 -all_load 相同,只是其后面需要指定具體要全部加載的庫(kù)的路徑,而其他庫(kù)仍按需加載。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容