У меня есть проект с объектами-c-классами и быстрыми классами. Сейчас я нахожусь в точке, где я должен отправить уведомление от Objective-C класса:NSNotificiation между классом object-c и классом swift
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// Here I present swift view controller
CollectionViewController *cvc = [[CollectionViewController alloc] initWithNibName:@"CollectionViewController" bundle:nil];
UINavigationController *controller = [[UINavigationController alloc] initWithRootViewController:cvc];
[self.navigationController presentViewController:controller animated:YES completion:nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"BuildingReady" object:self userInfo:[NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:chosenBuilding, nil] forKeys:[NSArray arrayWithObjects:@"chosenBuilding", nil]]];
}
И я слушаю это уведомление в быстром классе:
import UIKit
@objc class CollectionViewController : UIViewController, UICollectionViewDataSource, UICollectionViewDelegate , UICollectionViewDelegateFlowLayout {
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "getBuilding:", name: "BuildingReady", object: nil)
}
func getBuilding(notification: NSNotification) {
let userInfo: Dictionary<String, Building!> = notification.userInfo as! Dictionary<String, Building!>
self.chosenBuilding = userInfo["chosenBuilding"]
}
Проблема не в том, что в быстром классе я никогда поймать мое уведомление (func getBuilding
никогда не вызывается). Может ли быть проблема, что один объект является объектным классом c, а второй - классом swift?
Можете ли вы пытались изменить getBuilding к Func getBuilding общественности? –
@MustafaIbrahim Я не думаю, что это проблема. Потому что в разных классах я отправляю уведомление об этом ('CollectionViewController') swift-классе, и он улавливает уведомление, затем вызывается другая func (написанная так же, как 'getBuilding'), и нет проблем. – Superian007
Возможно, вам не следует использовать две строковые константы. Вы пытались объявить одну, общедоступную строковую константу? –