1

Je souhaite transmettre les données d'étiquette de texte de cellule de table de la classe swift à la classe objective c. En classe rapide, je l'ai fait ce qui suit,Comment transmettre des données de chaîne de la classe swift à la classe objective c à l'aide de la notification

class NewsViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 
@IBOutlet weak var newsTableView: UITableView! 

var myVC:NewsDetailsViewController! 
} 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    tableView.deselectRow(at: indexPath, animated: true) 
    print("selected index :",indexPath.row) 

    let selectedCell = tableView.cellForRow(at: indexPath) 
    print("did select and the text is \(selectedCell?.textLabel?.text)") 
    myVC.passedValue = selectedCell?.textLabel?.text 
    print("text label value: ", myVC.passedValue) 
    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "PostQuestion"), object: myVC.passedValue) 
    self.present(myVC, animated: true , completion: nil) 

} 

Maintenant, je veux recevoir ces données de chaîne avec mon autre contrôleur qui est une classe objective c. Merci de guider.

+0

si possible puis passer chaîne avec la méthode 'prepareForSegue' sinon vous pouvez utiliser' NSUserDefaults' –

+0

Suis pas usi Tout segue et NSUserDefaults est limité dans mon projet. Donc je veux dans le centre de notification. – user579911

+0

Vous devez utiliser le dictionnaire 'userInfo' pour transmettre des données et utiliser' self' (l'expéditeur) comme paramètre pour 'object'. Est-ce que myVC.passedValue' est la bonne valeur ou ne devriez-vous pas utiliser myVC.passedValue'? – clemens

Répondre

4

Vous devez envoyer votre notification avec

NotificationCenter.default.post(name: NSNotification.Name(rawValue: "PostQuestion"), 
    object: self, 
    userInfo: ["value": myValue] as Dictionary<AnyHashable, Any>) 

et traiter les notifications avec quelque chose comme

func processNotification(notification: NSNotification) { 
    let userInfo = notifcation.userInfo 

    if let value = userInfo?["value"] as? String { 
     ... 
    } 
} 

ou même en Objective-C

- (void)processNotification:(NSNotification *)notification { 
    NSString *value = [notifcation.userInfo objectForKey:@"value"] 

    if(value) { 
     ... 
    } 
} 
+0

comment le recevoir dans ma classe objective c? – user579911

+0

J'ai mis à jour mon message. – clemens

+0

pas besoin d'avoir ce nom de méthode processNotification lors de l'envoi de données? – user579911