我在父类中创建一个MCSession:
- (void) setUpMultipeer{
// Setup peer ID
self.myPeerID = [[MCPeerID alloc] initWithDisplayName:[UIDevice currentDevice].name];
// Setup session
self.mySession = [[MCSession alloc] initWithPeer:self.myPeerID];
self.mySession.delegate = self;
// Setup BrowserViewController
self.browserVC = [[MCBrowserViewController alloc] initWithServiceType:@"chat" session:self.mySession];
self.browserVC.delegate = self;
// Setup Advertiser
self.advertiser = [[MCAdvertiserAssistant alloc] initWithServiceType:@"chat" discoveryInfo:nil session:self.mySession];
[self.advertiser start];
}
我有两个子类,它们是父类的每个子类。我尝试记录每个子类中连接的对等体的数量,都返回0.此外,在记录self.mySession
时,我得到了这个:
mySession:<MCSession: 0x15d7aae0 MyPeerID = <MCPeerID: 0x15d7b360 DisplayName = Eric's iPhone> SecurityIdentity = (null) EncryptionPreference = Optional ConnectedPeers = (
) Delegate = <ChildViewController: 0x15d867f0>>
我从未将代理设置为子代,但似乎认为MCSession代理已更改为子代,而不是留在父代。每个子视图控制器都说它是委托,我认为为了这个工作,每个孩子VC应该说父母是委托。我错过了什么?
另外:我正在使用故事板。 Child VC都是嵌入在NavigationController中的控制拖动推送segue。 NavController&gt;父母&gt;儿童1&amp;孩子2
答案 0 :(得分:0)
从子类创建对象并不意味着也会创建与超类的单独实例。您只拥有 一个 对象 是 ChildViewController
和SuperViewController
在同一时间。
执行上述代码时,self
关键字引用ChildViewController
的实际实例,同时也是SuperViewController
的实例。
如果你在子类及其超类中记录self
关键字,你会发现它们实际上指向了内存中的同一个对象。
P.S。你可以尝试po (SuperViewController *) [[self mySession] delegate]
,你会得到你期望的。