gpt4 book ai didi

ios - 如何快速等待 ui 委托(delegate)

转载 作者:行者123 更新时间:2023-11-30 13:49:54 25 4
gpt4 key购买 nike

我想创建简单的对象助手来在我的 Swift 2.0 应用程序的许多地方发送短信,并在下一步中创建另一个助手(电子邮件、pdf 打开器等)

我创建简单的类:

import Foundation
import MessageUI

class SmsHelper: MFMessageComposeViewControllerDelegate {

func sendSMS(body: String){
if (MFMessageComposeViewController.canSendText()){
let messageVC = MFMessageComposeViewController()
messageVC.body = body
//messageVC.recipients = ["Enter tel-nr"]
messageVC.messageComposeDelegate = self;
AppDelegate().sharedInstance().getTopController().presentViewController(messageVC, animated: false, completion: nil)

}
else{
//do some alert etc.
}
}


func messageComposeViewController(controller: MFMessageComposeViewController, didFinishWithResult result: MessageComposeResult){
sendSMSRsp(result, errorMsg: nil)
controller.dismissViewControllerAnimated(true, completion: nil)
print("sms didFinishWithResult")
}
}

在代码中我想这样做的任何地方:

class someAnotherClass{
func someFunction(){
let smsHelper = SmsHelper()
smsHelper.sendSms("some text")
}
}

所以短信ios编辑器已打开,但是当我想关闭它或发送时,它不会关闭,函数 messageComposeViewController(controller: MFMessageComposeViewController, didFinishWithResult result: MessageComposeResult) 我从未调用过和应用程序因内存泄漏而崩溃,我知道原因:是因为“someFunction”中的 SmsHelper 对象在该函数的结束范围后删除,并且该对象为 nil,并且系统尝试在 nil 对象处调用 didFinishWithResult。我确认了这一点:当我将 smsHelper 对象添加为“SomeClass”的成员时,它起作用了 - 调用了委托(delegate)。

问题是:最好的做法是什么,添加成员对我来说不是一个选择,因为很多类都可以使用它,还创建一个单例,appDelegate 成员我认为非常愚蠢。如何强制不在作用域函数末尾删除对象?

最佳答案

尝试使用单例方式来做到这一点:

class SmsHelper: MFMessageComposeViewControllerDelegate {
static let sharedInstance = SmsHelper()
private init() {}
}

及用法:

SmsHelper.sharedInstance().sendSms('some text')

编辑: 如果您添加与抽象类不同的 init 方法。

 private override init(message: String){
super.init()
}

然后将定义更改为static let sharedInstance = SmsHelper(message:"smsHelper") 不会很复杂。

对于您的委托(delegate),只需在 UIViewController viewDidLoad 中的 init 方法中将其分配,

SmsHelper.sharedInstance().delegate = self

关于ios - 如何快速等待 ui 委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34411159/

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