Я пытаюсь передать блок завершения на Objective-C API, но Xcode говорит построить не удалось из-за сигнала: Segmentation Fault: 11.Почему этот кусок кода не компилируется на Xcode 8.2.1
нарушитель линия, как представляется, в методе browseAllFilesInRouter:
let completion = { (response: Dictionary<AnyHashable, Any>?, error: NSError?) in
print("response")
} as? UPPResponseBlock
device.contentDirectoryService().browse(withObjectID: "0", browseFlag: BrowseDirectChildren, filter: "dc:title,upnp:originalTrackNumber,res,[email protected]", startingIndex: 0, requestedCount: 0, sortCritera: nil, completion: completion!)
Вот полный класс для более полной справки:
import Foundation
class TVNetworkClient: NSObject, UPPDiscoveryDelegate {
var routers: [UPPMediaServerDevice]
var routerFileSystemTree: [UPPMediaItem]
var searchTimer: Timer
var completionBlock: ((_: [String: String], _: NSError) -> Void)?
var notifyBlock: ((_: Bool, _: NSError) -> Void)?
//MARK: - Initializers
override init() {
routers = []
routerFileSystemTree = []
searchTimer = Timer.scheduledTimer(withTimeInterval: 5.0, repeats: true) {
_ in
print("requesting data.")
UPPDiscovery.sharedInstance().startBrowsing(forServices: "ssdp:all")
}
super.init()
UPPDiscovery.sharedInstance().addBrowserObserver(self)
searchTimer.fire()
}
convenience init(notify: @escaping (_: Bool, _: NSError) -> Void) {
self.init()
notifyBlock = notify
}
convenience init(completion: @escaping (_: [String: String], _: NSError) ->()) {
self.init()
completionBlock = completion
}
//MARK: - Discovery Delegate
func discovery(_ discovery: UPPDiscovery!, didFind device: UPPBasicDevice!) {
if let server = device as? UPPMediaServerDevice {
self.routers.append(server)
self.browseAllFilesInRouter(device: server)
}
}
func discovery(_ discovery: UPPDiscovery!, didRemove device: UPPBasicDevice!) {
}
//MARK: - Browse
func browseAllFilesInRouter(device: UPPMediaServerDevice) {
let completion = { (response: Dictionary<AnyHashable, Any>?, error: NSError?) in
print("response")
} as? UPPResponseBlock
device.contentDirectoryService().browse(withObjectID: "0", browseFlag: BrowseDirectChildren, filter: "dc:title,upnp:originalTrackNumber,res,[email protected]", startingIndex: 0, requestedCount: 0, sortCritera: nil, completion: completion!)
}
}
Я сделал изолированный проект Xcode с библиотеками I'M U петь, чтобы вы могли попробовать.
https://drive.google.com/file/d/0By-7Jq4FK2KEcmRnS3lSVjdNcDA/view?usp=sharing