1、使用时插件无法出现,内容显示不出来的原因
- 再uniapp x中使用时,必须给这个插件高度和宽度,否则出不来!
- ///uniapp x 中使用
- <uts-hello-view buttonText="点击按钮内容" style="width:375px;height: 375px;background-color: aqua;"></uts-hello-view>
复制代码
- 在IOS中编写这个插件的内容时间,不能全用self.bounds,有大概出不来啊!!!!必要直接写死frame,或者使用束缚;
- 同时,在didMoveToSuperview中获取view的frame不可,都是0,必要在layoutSubviews方法中获取view的frame才可以
- 每次添加新的自界说UTS组件后最好重新走一遍自界说基座
2、无法运行
- 检查是否都已经Podfile文件中版本修改为12
- 问题:Sandbox: bash(72928) deny(1) file-write-create
方法:build settings->User Script Sandboxing 修改为NO
3、使用第三方库时,不能在.h文件中导入这个内容第三方库 !!!
4、swift 如果类添加了public前缀,那么无法添加协议MAMapViewDelegate,会报错!!!
5、怎样在uts插件中调用swift的方法
首先,swift必须是public 或者open修饰,好比 public class NHT_DemoView
但是高德舆图又不能用这个修饰,以是将高德舆图添加到一个view上,然后将这个view添加到另一个通过
public修饰的类上,通过这个类调用高德舆图的api;
6、怎样在UTS插件中使用swift的闭包
官网链接参考
swift:
@objc open var SelectLocationChangeBlock: (([String:Any])->Void)?
UTS插件:
- NVLoad() : NHT_DemoView {
- // -----NHT_AMAPView
- let button = new NHT_DemoView()
- button.SelectLocationChangeBlock = (res : any) => {
- this.$emit('fetchgis', res)
- };
- return button
- },
复制代码
- 原生中有些方法的闭包参数是逃逸闭包,此时就要在闭包前面添加 @escaping 标记:
// 在闭包参数前添加@escaping
- **在.ust文件中定义使用**
- let blockMine : ((res : string) => void) | null = null;
- // 逃逸闭包使用,在闭包参数前添加@escaping
- export function testVariableBlock(@escaping completion : (res : string) => void) {
- // 在闭包参数前添加@escaping
- blockMine = completion
- setTimeout(function () {
- blockMine?.("xxxx111")
- }, 5000);
- };
复制代码 7、 this.$emit传值报错,error: cannot convert value of type ‘String’ to expected argument type ‘[String : Any]?’
因为传值范例不对,可以本身声明一个变量,然后当参数传值
- const map1 = new Map<string,any>()
- map1.set('a', 'alpha');
复制代码 或者改变相应回调的写法(必须按照你实际的返回内容),
- button.SelectLocationChangeBlock = (res : Map<string, any>) => {
- this.$emit('fetchgis', res)
- };
复制代码 8、error: uni_modules/nhyt-texs/utssdk/app-ios/src/index.swift:61:9: error: contextual closure type ‘(Any, Any) -> Void’ expects 2 arguments, but 1 was used in closure body
大概是watch中出现的问题
好比监听下面的值
“enableLocation”: {//允许定位
type: Boolean,
default: false
},
watch: {
//这样写对,必须有newValue : boolean, oldVel : boolean,只有newValue会报这个错误
“enableLocation”: {
handler(newValue : boolean, oldVel : boolean) {
// if (!this.isInitLocation && newValue && !this.innerEnableLocation) {
// this.isInitLocation = true
// this.innerEnableLocation = newValue
// this.initLocation()
// }
},
immediate: false
},
}
9、emit
只能全部小写,有大写的不可,好比下面fetchGis就不可,而fetchgis可以
emits: [‘fetchGis’, “locate”, “hhhh”, “fetchgis”],
10、插件中使用关照
如今的问题是无法获取关照发过来的信息内容
插件.uts文件中使用关照
- import { NotificationCenter, NSNotification, Notification } from 'Foundation';
- import { UIApplication } from "UIKit"
- // 响应通知方法
- class NotificationListener {
- // 按钮点击回调方法
- @objc notificationAction() {
- console.log("通知")
- }
- }
- let listsner = new NotificationListener()
- // 启动监听推送消息事件
- export function onPushMessage() {
- const method = Selector("notificationAction")
- NotificationCenter.default.addObserver(listsner, selector = method, name = NSNotification.Name('testNNNN'), object = null)
- NotificationCenter.default.addObserver(listsner, selector = method, name = UIApplication.userDidTakeScreenshotNotification, object = null)
- setTimeout(function () {
- NotificationCenter.default.post(name = NSNotification.Name(rawValue = 'testNNNN'), object = { "2": "xxx32" } as any)
- offPushMessage()
- }, 3000);
- };
复制代码 11、插件中iOS推送功使用
前提是,你的app已经在苹果开发者中心设置了推送证书
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
- <plist version="1.0">
- <dict>
- <key>UIBackgroundModes</key>
- <array>
- <string>remote-notification</string>
- </array>
- <key>NSUserNotificationsUsageDescription</key>
- <string>打开XXX通知权限</string>
- </dict>
- </plist>
复制代码
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
- <plist version="1.0">
- <dict>
- <key>aps-environment</key>
- <string>development</string>
- </dict>
- </plist>
复制代码
- 吸收远程推送消息的方法
applicationDidReceiveRemoteNotificationCompletionHandler(application : UIApplication, userInfo : Map<AnyHashable, any>, completionHandler : ((res : Int) => void)) {}
- export class MyPluginClass implements UTSiOSHookProxy {
- // uts 插件创建时的回调。
- onCreate() {
- }
- // 应用正常启动时 (不包括已在后台转到前台的情况)的回调函数。
- applicationDidFinishLaunchingWithOptions(application : UIApplication | null, launchOptions : Map<UIApplication.LaunchOptionsKey, any> | null = null) : boolean {
- nowApplication = application
- // console.log("===============applicationDidFinishLaunchingWithOptions")
- return true
- }
- // 当应用程序接收到与用户活动相关的数据时调用此方法,例如,当用户使用 Universal Link 唤起应用时。
- applicationContinueUserActivityRestorationHandler(application : UIApplication | null, userActivity : NSUserActivity | null, restorationHandler : ((res : [any] | null) => void) | null = null) : boolean {
- console.log("===============applicationContinueUserActivityRestorationHandler")
- return true
- }
- // 远程通知注册成功时的回调函数。(打自定义基座时需要勾选 push 模块)
- didRegisterForRemoteNotifications(deviceToken : Data | null) {
- console.log("===============didRegisterForRemoteNotifications:", deviceToken)
- const token = PushObject.share().getHexString(for = deviceToken!)
- console.log("token----", token);
- NHTPushService.shareNHTPush().application(nowApplication!, didRegisterForRemoteNotificationsWithDeviceToken = deviceToken!);
- }
- // 远程通知注册失败时的回调函数。(打自定义基座时需要勾选 push 模块)
- didFailToRegisterForRemoteNotifications(error : NSError | null) {
- console.log("===============didFailToRegisterForRemoteNotifications:", error)
- NHTPushService.shareNHTPush().application(nowApplication!, didFailToRegisterForRemoteNotificationsWithError = error!);
- }
- /* 接收到远程推送消息
- 如果想在后台的时候收到远程推送的时候能调用这个方法
- 那么推送时后台必须加上参数
- "content-available":1 */
- applicationDidReceiveRemoteNotificationCompletionHandler(application : UIApplication, userInfo : Map<AnyHashable, any>, completionHandler : ((res : Int) => void)) {
- NHTPushService.shareNHTPush().application(application, didReceiveRemoteNotification = userInfo, fetchCompletionHandler = (res : UIBackgroundFetchResult) => {
- completionHandler(0);
- });
- }
- // 通过 url scheme 方式唤起 app 时的回调函数。(iOS9 之前的系统回调此方法,iOS9 之后的系统请使用 applicationOpenURLOptions)
- applicationHandleOpenURL(application : UIApplication | null, url : URL | null) : boolean {
- console.log("===============applicationDidFinishLaunchingWithOptions")
- return true
- }
- // 通过 url scheme 方式唤起 app 时的回调函数。
- applicationOpenURLOptions(app : UIApplication | null, url : URL, options : Map<UIApplication.OpenURLOptionsKey, any> | null = null) : boolean {
- console.log("===============applicationDidFinishLaunchingWithOptions")
- return true
- }
- // 当应用从活动状态主动变为非活动状态的时的回调函数。
- applicationWillResignActive(application : UIApplication | null) {
- // console.log("===============applicationWillResignActive")
- }
- // 应用完全激活时的回调函数。
- applicationDidBecomeActive(application : UIApplication | null) {
- // console.log("===============applicationDidBecomeActive")
- }
- // 应用程序进入后台时的回调函数。
- applicationDidEnterBackground(application : UIApplication | null) {
- console.log("===============did enter background")
- }
- // 当应用在后台状态,将要进入到前台运行时的回调函数。
- applicationWillEnterForeground(application : UIApplication | null) {
- console.log("===============applicationWillEnterForeground")
- }
- // 应用程序的 main 函数。
- applicationMain(argc : Int32, argv : UnsafeMutablePointer<UnsafeMutablePointer<CChar> | null>) {
- console.log("applicationMain")
- }
- }
复制代码 12、常见几种iOS原生函数在uniapp x中的使用示例
UTS中使用时的留意点:
- 参数之间用=毗连
- OC写的方法,在uniapp x中使用样式和在swift中类似,可以参考
- //oc中的方法
- -(void)checkIsHavePower_Microphone:(void (^)(NSInteger status))allowBlock;
- //UTS文件中使用
- export function checkIsHavePower_Microphone(callBack : (res : number) => void) {
- NHTFunction.share().checkIsHavePower_Microphone((state : Int) => {
- callBack(Number(state))
- });
- };
复制代码- //oc中的方法
- -(void)startChangeTextToSpeech:(NSString *)text repeatPlay:(BOOL)repeatPlay;
- //UTS文件中使用
- export function startChangeText(speechText : string, repeatPlay : boolean) {
- NHTFunction.share().startChangeText(toSpeech = speechText, repeatPlay = repeatPlay);
- };
复制代码 13、范例转换
- swift 中的 Dictionary 范例,在 uts 中使用 Map 范例代替
- let resultInfo = res as Map<string, any | null>
复制代码
14.部门原生数据范例问题
部门范例(好比:CBCharacteristic),不能单独从数据中取出并使用,会直接瓦解,console也不可
- export function notifyBLECharacteristicValueChange(options : NotifyBLECharacteristicValue) {
- NHT_Bluetooth.share().notifyBLECharacteristicValueChange((res : any) => {
- var resultInfo = res as Map<string, any | null>
- console.log("----订阅特征值--notifyBLECharacteristicValueChange", res);//这个可以
- const characteristic = resultInfo.get('characteristic') ?? "xxx"; //CBCharacteristic
- if (characteristic != null) {
- //不能打印characteristic(类型是CBCharacteristic),也不能使用,会崩溃
- console.log("----订阅特征值--notifyBLECharacteristicValueChange",characteristic);
- }
- options.success(characteristic)//这样也会崩溃
- });
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |