我需要使用协议将数组从AppDelegate
传递到viewcontroller
。我是这个概念的新手。请帮我一些代码。我需要将字符串dataArr
传递给另一个viewcontroller
并将其显示在tableview
guard let message = note(fromRegionIdentifier: region.identifier) else { return }
window?.rootViewController?.showAlert(withTitle: nil, message: "you have entered " + message)
if (dataArr.count <= 5){
dataArr.append(message)
}
let userdefaults = UserDefaults.standard
userdefaults.set(dataArr, forKey: "message")
}
我只需要将这些警报保存到userdefaults
并将它们显示在tableview
上,我刚刚尝试过,但是它只在tableview
上显示了单个字符串
let savedstring = UserDefaults.standard.array(forKey: "message")
cell?.cordinateLabel.text = savedstring?[indexPath.row] as? String
return cell!
答案 0 :(得分:1)
首次创建协议
protocol MyDelegate {
public yourMethod(param: String);
}
在您的ViewController中,您需要从Protocol扩展它,并将其设置为AppDelegate
class YourViewController: MyDelegate {
// Your Other methods
override func viewDidLoad() {
super.viewDidLoad()
// set your delegate to Appdelegate
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.yourDelegate = self;
}
func yourMethod(param: String) {
// Do your stuff
}
}
现在,终于在AppDelegate中声明协议对象并通过其引用调用yourMethod。
class AppDelegate: UIApplicationDelegate {
public yourDelegate: MyDelegate!;
}
现在,您可以在AppDelegate中的任意位置调用方法,例如
yourDelegate.yourMethod(params);
最简单的方法是使用NotificationCenter。 首先,您需要在应用程序中的任何位置向Notification.Name添加扩展名。喜欢
extension Notification.Name { static let mynotification = Notification.Name("mynotification") }
在您的视图控制器中的viewDidLoad方法中添加
NotificationCenter.default.addObserver(self, selector: #selector(yourMethod), name: NSNotification.Name.mynotification, object: nil)
然后在您的ViewController中添加一个方法,该方法将在触发通知时被调用
func yourMethod(){
//// do something
}
现在,在您的应用程序委托中,甚至在应用程序中的任何地方,您都可以通过发送通知Like来调用viewController的方法
NotificationCenter.default.post(name: NSNotification.Name.mynotification, object: nil)