Question

I create an MCSession in a parent class with this:

- (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];
}

I have two child classes that are each subclasses of the parent class. I try to log the number of connected peers in each subclass, both return 0. In addition, when logging self.mySessionI get this:

mySession:<MCSession: 0x15d7aae0 MyPeerID = <MCPeerID: 0x15d7b360 DisplayName = Eric's iPhone> SecurityIdentity = (null) EncryptionPreference = Optional ConnectedPeers = (
) Delegate = <ChildViewController: 0x15d867f0>>

I never set the delegate to the child, but it appears to think the MCSession Delegate has been changed to the child instead of staying with the parent. Each Child View Controller says it is the delegate, I would think for this to work each child VC should say the parent is the delegate. What am I missing?

ALSO: I'm using storyboard. Both Child VC's are control-dragged push segues embedded in a NavigationController. NavController > Parent >Child 1 & Child 2

Was it helpful?

Solution

Creating an object from a subclass doesn't mean a separate instance from the super class will be created too. You'll only have one object which is a ChildViewController and a SuperViewController at the same time.

When the above code is executed, the self keyword references to the actual instance of ChildViewController which is also, at the same time, an instance of SuperViewController too.

And if you log the self keyword in the subclass and its super class, you will notice that they actually point to the same object in memory.

P.S. You can try po (SuperViewController *) [[self mySession] delegate] and you'll get what you expect.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top