gpt4 book ai didi

ios - Alljoyn 初始化总线附件抛出 EXC_BAD_ACCESS

转载 作者:行者123 更新时间:2023-11-29 01:11:22 25 4
gpt4 key购买 nike

我正在尝试使用 alljoyn 库创建一个 iOS 应用程序。但是,当我尝试通过调用 busAttachment = AJNBusAttachment.init(applicationName: "BusName", allowRemoteMessages: true);
在 swift 中创建总线附件时我得到一个 EXC_BAD_ACCESS运行时出错。

这是我用来创建和使用总线附件的类

class HostController: UIViewController {

var hostApi: HostApi!

var busAttachment: AJNBusAttachment!

var sessionOpts: AJNSessionOptions!

var CONTACT_PORT: AJNSessionPort = 12345

var serviceName: String = "org.company.appname.HelloWorld"


override func viewDidLoad() {
super.viewDidLoad();
NSLog("HostController viewDidLoad");


var status: QStatus!

busAttachment = AJNBusAttachment(applicationName: "BusName", allowRemoteMessages: true);

busAttachment.registerBusListener(BusListener());


hostApi = HostApi.init(busAttachment: busAttachment, onPath: "/HostService");

status = busAttachment.start();

if (status != ER_OK) {
NSLog("busAttachment.start, Status: %s", QCC_StatusText(status));
}

status = busAttachment.registerBusObject(hostApi);

if (status != ER_OK) {
NSLog("busAttachment.registerBusObject, Status: %s", QCC_StatusText(status));
}


status = busAttachment.connectWithArguments(nil);

if (status != ER_OK) {
NSLog("busAttachment.connectWithArguments, Status: %s", QCC_StatusText(status));
}


status = busAttachment.requestWellKnownName(serviceName, withFlags: kAJNBusNameFlagReplaceExisting | kAJNBusNameFlagDoNotQueue)

if (status != ER_OK) {
NSLog("busAttachment.requestWellKnownName, Status: %s", QCC_StatusText(status));
}


sessionOpts = AJNSessionOptions.init(trafficType: kAJNTrafficMessages, supportsMultipoint: true, proximity: kAJNProximityAny, transportMask: kAJNTransportMaskTCP);



status = busAttachment.bindSessionOnPort(CONTACT_PORT, withOptions: sessionOpts, withDelegate: nil);

if (status != ER_OK) {
NSLog("busAttachment.bindSessionOnPort, Status: %s", QCC_StatusText(status));
}


status = busAttachment.advertiseName(serviceName, withTransportMask: sessionOpts.transports);

if (status != ER_OK) {
NSLog("busAttachment.advertiseName, Status: %s", QCC_StatusText(status));
}


NSLog("Done");
}



override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning();
// Dispose of any resources that can be recreated.
}


class BusListener: NSObject, AJNBusListener {}

class SessionPortListener: NSObject, AJNSessionPortListener {

func shouldAcceptSessionJoinerNamed(joiner: String!, onSessionPort sessionPort: AJNSessionPort, withSessionOptions options: AJNSessionOptions!) -> Bool {
if (sessionPort == 12345) {
NSLog("New peer joining session: %s", joiner);
return true;
} else {
return false;
}
}

}

}

有一件事我可能会遗漏,在 Java 上我们必须调用 org.alljoyn.bus.alljoyn.DaemonInit.PrepareDaemon(context);在我们可以使用总线附件之前,但是在为 iOS 提供的示例中似乎没有等效的调用。也许我只是错过了它,它被放在了其他地方,或者在 iOS 上可能没有等价物。

最佳答案

与 Java 一样,您需要先初始化 AllJoyn,然后才能使用它。为了解决这个问题,我将 #import "AJNInit.h" 添加到我的桥接 header 中,并将其添加到我的 swift 中以初始化 AllJoyn。

AJNInit.alljoynInit();
AJNInit.alljoynRouterInit();

您还应该调用这些方法来释放AllJoyn使用的资源。

AJNInit.alljoynShutdown();
AJNInit.alljoynRouterShutdown();

关于ios - Alljoyn 初始化总线附件抛出 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35714304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com