#arrays #swift #userdefaults
#массивы #swift #ошибки пользователя
Вопрос:
Мне нужно передать массив из 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!
Комментарии:
1. Используйте центр уведомлений для отправки уведомлений с полезной нагрузкой
2.Q1: «Мне нужно передать массив из AppDelegate в viewcontroller с использованием протоколов» что делает любой массив, связанный с моделью, в вашем приложении-делегате? Q2: для чего вам нужен протокол?
3. я работаю над приложением для геозоны. я получаю предупреждение от метода делегирования уведомлений, который находится в AppDelegate. итак, я создал массив и отправил предупреждение в массив. мне нужно отобразить список идентификаторов в табличном представлении через этот массив.
Ответ №1:
- Использование протокола
Сначала создайте протокол
protocol MyDelegate {
public yourMethod(param: String);
}
В вашем ViewController вам нужно расширить его из протокола и установить для него значение 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
Самый простой способ — сделать это с помощью NotificationCenter. Сначала вам нужно добавить расширение к уведомлению.Назовите любое место в вашем приложении. Нравится
extension Notification.Name { static let mynotification = Notification.Name("mynotification") }
В вашем методе viewDidLoad viewDidLoad контроллера представления добавьте
NotificationCenter.default.addObserver(self, selector: #selector(yourMethod), name: NSNotification.Name.mynotification, object: nil)
Затем в вашем ViewController добавьте метод, который будет вызываться при запуске уведомления
func yourMethod(){
//// do something
}
Теперь в делегате вашего приложения или даже в любом месте из приложения вы можете вызвать метод ViewController, отправив уведомление, например
NotificationCenter.default.post(name: NSNotification.Name.mynotification, object: nil)