升级到iOS Beta 13之后,我注意到了一件不愉快的事情:我的应用有时会因传入的VoIP推送而崩溃。
在崩溃报告中,我看到以下内容:
iOS 13 Killing app because it never posted an incoming call to the system after receiving a PushKit VoIP callback
Fatal Exception: NSInternalInconsistencyException
0 CoreFoundation 0x1af21b9f0 __exceptionPreprocess
1 libobjc.A.dylib 0x1af7284fc objc_exception_throw
2 CoreFoundation 0x1af11efec +
[_CFXNotificationTokenRegistration keyCallbacks]
3 Foundation 0x1aeda1330 -[NSAssertionHandler
handleFailureInMethod:object:file:lineNumber:description:]
4 PushKit 0x19caa6b54 -[PKPushRegistry
_terminateAppIfThereAreUnhandledVoIPPushes]
5 libdispatch.dylib 0x1afa441ec _dispatch_client_callout
6 libdispatch.dylib 0x1af9f6c6c
_dispatch_lane_barrier_sync_invoke_and_complete
7 PushKit 0x19caa5b74 __73-[PKPushRegistry
voipPayloadReceived:mustPostCall:withCompletionHandler:]_block_invoke
8 libdispatch.dylib 0x1afa43678
_dispatch_call_block_and_release
9 libdispatch.dylib 0x1afa441ec
_dispatch_client_callout
10 libdispatch.dylib 0x1af9f61f8
_dispatch_main_queue_callback_4CF$VARIANT$mp
11 CoreFoundation 0x1af1992a0
CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE …Run Code Online (Sandbox Code Playgroud) 我有2个UITextField属性和1个UIButton的授权控制器.我想将View绑定到ViewModel,但不知道如何操作.这是我的AuthorizatioVC.swift:
class AuthorizationViewController: UIViewController {
let disposeBag = DisposeBag()
@IBOutlet weak var passwordTxtField: UITextField!
@IBOutlet weak var loginTxtField: UITextField!
@IBOutlet weak var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
addBindsToViewModel()
}
func addBindsToViewModel(){
let authModel = AuthorizationViewModel(authClient: AuthClient())
authModel.login.asObservable().bindTo(passwordTxtField.rx_text).addDisposableTo(self.disposeBag)
authModel.password.asObservable().bindTo(loginTxtField.rx_text).addDisposableTo(self.disposeBag)
//HOW TO BIND button.rx_tap here?
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的AuthorizationViewModel.swift:
final class AuthorizationViewModel{
private let disposeBag = DisposeBag()
//input
//HOW TO DEFINE THE PROPERTY WHICH WILL BE BINDED TO RX_TAP FROM THE BUTTON IN VIEW???
let authEvent = ???
let login = …Run Code Online (Sandbox Code Playgroud) 我想取消订阅RxSwift中的Observable.为了做到这一点,我曾经将Disposable设置为nil.但在我看来,在更新到RxSwift 3.0.0-beta.2后,这个技巧不起作用,我无法取消订阅Observable:
//This is what I used to do when I wanted to unsubscribe
var cancellableDisposeBag: DisposeBag?
func setDisposable(){
cancellableDisposeBag = DisposeBag()
}
func cancelDisposable(){
cancellableDisposeBag = nil
}
Run Code Online (Sandbox Code Playgroud)
那么可能有人可以帮我如何正确取消订阅Observable?
当我开始使用RxSwift时,我曾经BaseViewController使用RxSwift在我所有的控制器上创建和扩展它.BaseViewController.swift的代码:
class BaseViewController: UIViewController {
var mSubscriptions: CompositeDisposable?
func addSubscription(subscription: Disposable){
if(mSubscriptions == nil){
mSubscriptions = CompositeDisposable()
}
if let mSub = mSubscriptions{
mSub.addDisposable(subscription)
}
}
func unsubscribeAll(){
if let mSub = mSubscriptions{
mSub.dispose()
mSubscriptions = nil
}
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
unsubscribeAll()
}
deinit{
unsubscribeAll()
}
}
Run Code Online (Sandbox Code Playgroud)
我在我的子控制器中使用addSubscription(:_)方法.例如,一段代码来自:
class TasksViewController: BaseViewController{
overrided func viewWillAppear(){
//...
var subscribe = dataLoader.load(requestNetwork, dataManager: taskDataManager)
.observeOn(ConcurrentDispatchQueueScheduler(queue: queue))
.subscribe({ (event) -> Void in
//...
}) …Run Code Online (Sandbox Code Playgroud) 如果在RxSwift中遇到错误,我需要发出一系列项目.在JAVA中,可以使用"onErrorResumeNext"运算符完成.但是我在Swift中找不到相同的运算符或它的替代品.
我的VC.swift中有两个Bool属性:
var isRecording = false
var isPlaying = false
Run Code Online (Sandbox Code Playgroud)
在viewDidLoad()方法中我有这样的代码:
let observable = Observable.combineLatest(self.rx_observe(Bool.self, "isRecording"), self.rx_observe(Bool.self, "isPlaying")) { (val1, val2) -> Void in
if(val1 == false && val2 == false){
self.recordButton.enabled = true
self.playButton.enabled = true
self.recordButton.setImage(UIImage(named: "record"), forState: UIControlState.Normal)
self.playButton.setImage(UIImage(named: "play"), forState: UIControlState.Normal)
} else if(val1 == true && val2 == false){
self.recordButton.enabled = true
self.recordButton.setImage(UIImage(named: "stop"), forState: UIControlState.Normal)
self.playButton.enabled = false
} else if(val1 == false && val2 == true){
self.recordButton.enabled = false
self.playButton.enabled = true
self.playButton.setImage(UIImage(named: "stop"), …Run Code Online (Sandbox Code Playgroud) 我尝试在Sierra OS上启动kamailio.当我使用"/ usr/local/sbin/kamailio -c"运行kamailio时出现此错误:
0(49276) ERROR: <core> [core/sr_module.c:571]: load_module(): could not find module <mi_fifo> in </usr/local/lib64/kamailio/modules/>
0(49276) CRITICAL: <core> [core/cfg.y:3401]: yyerror_at(): parse error in config file /usr/local/etc/kamailio/kamailio.cfg, line 219, column 12-23: failed to load module
0(49276) ERROR: <core> [core/sr_module.c:571]: load_module(): could not find module <mi_rpc> in </usr/local/lib64/kamailio/modules/>
0(49276) CRITICAL: <core> [core/cfg.y:3401]: yyerror_at(): parse error in config file /usr/local/etc/kamailio/kamailio.cfg, line 236, column 12-22: failed to load module
0(49276) ERROR: <core> [core/modparam.c:152]: set_mod_param_regex(): No module matching <mi_fifo> found
0(49276) CRITICAL: <core> [core/cfg.y:3404]: …Run Code Online (Sandbox Code Playgroud) 我需要从像URL字符串创建NSURL的目标这一。它包含|符号。问题是 NSURL 构造函数总是返回 nil,因为|符号。我怎样才能创建这个对象?