2016-09-09 4 views
0

Ich bin neu in der Codierung im Allgemeinen so bitte bitte mit mir, wie ich das Problem zu erklären. Ich verwende Multipeer-Konnektivität in meiner App, die bisher nur aus 1 Nav-Controller und 1 Chat-Schnittstelle besteht.Kann Delegat nicht zu performsegue

Ich habe eine separate Klasse verwendet, um die MCSession, MCnearbyadvert & MCnearbybrowser zu deklarieren. Innerhalb dieser Klasse hoffte ich, einen Delegaten zu verwenden, wenn das Zertifikat für die Verbindung empfangen wurde, um für peformseguewithidentifier in die Chat-Schnittstelle einzutreten. Ich habe viele ähnliche Fragen gelesen und leider hat keine der Lösungen geholfen.

Hier ist meine ViewController.h Datei

#import "MCManager.h" 
#import "ChatViewController.h" 

@interface ViewController : UIViewController <MCManDelegate> 


@property (weak, nonatomic) IBOutlet FBSDKLoginButton *faceBookButton; 
@property (nonatomic, strong) NSString *chatId; 

-(void)onRequestSuccess; 
@end 

ist hier die relevanten Teile meiner ViewController.m Datei tragen

#import "ViewController.h" 
#import "ChatViewController.h" 
#import "MCManager.h" 
#import "AppDelegate.h" 

@interface ViewController() <FBSDKLoginButtonDelegate> 
@property (nonatomic, strong) AppDelegate *appDelegate; 

@end 

@implementation ViewController 


- (void)viewDidAppear:(BOOL)animated{ 
[super viewDidAppear:YES]; 
FBSDKLoginButton *loginButton = [[FBSDKLoginButton alloc] init]; 
loginButton.delegate = self; 
loginButton.center = self.view.center; 
[self.view addSubview:loginButton]; 
if ([FBSDKAccessToken currentAccessToken]){ 
    [self createButton]; 
    MCManager *mcmanager = [[MCManager alloc] init] 
    mcmanager.delegate = self; 
    _appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
     [[_appDelegate mcManager] advertiseSelf]; 
    } 
} 
-(void)onRequestSuccess{ 
    NSLog(@"doSegue initiated"); 
    [self doSegue]; 
} 

- (void)doSegue{ 
    NSLog(@"doSegue loaded"); 
    [self performSegueWithIdentifier:@"ChatViewControl" sender:self]; 
} 

Bitte beachten Sie die [[MCManager alloc zu setzen Ich habe versucht, ] init] in verschiedenen Teilen des Codes, kann aber nicht den richtigen Ort finden.

sowieso hier ist mein MCManager.h

@protocol MCManDelegate <NSObject> 
@required 
-(void)onRequestSuccess; 
@end 

@interface MCManager : NSObject <MCSessionDelegate,MCNearbyServiceAdvertiserDelegate,MCNearbyServiceBrowserDelegate> { 
    id<MCManDelegate> delegate; 
} 

    @property (weak) id<MCManDelegate>delegate; 
+some other unrelated properties 

hier ist meine MCManager.m Datei und relevante Methode

#import "MCManager.h" 
@implementation MCManager 

@synthesize delegate = _delegate; 
- (void) session:(MCSession *)session didReceiveCertificate:(nullable NSArray *)certificate fromPeer:(nonnull MCPeerID *)peerID certificateHandler:(nonnull void (^)(BOOL))certificateHandler 
{ 
    NSLog(@"Handled Invitation"); 
    certificateHandler(YES); 
    [self.delegate onRequestSuccess]; 
    NSLog(@"%@",self.delegate); 


} 

Die NSLog Einladung behandelt erscheint jedoch die NSLog self.delegate erzeugt (null) was ich weiß, ist falsch und ich weiß, dass es verwandt ist, wie ich den Delegaten in der viewcontroller.m Datei initialisiere, aber ich bin nur nicht sicher, wie man es repariert! Wäre sehr dankbar, helfen ...

Antwort

0

Dieses Versuchen:

MCManager Deklarieren * mcmanager global und initialisieren in viewDidLoad

+0

Ich habe das schon mal probiert, hatte aber kein Glück, deklarierte die Variable mit '@property (nonatomic, strong & weak) MCManager * mcmanager' sowie mit' extern MCManager * mcmanager'. Ich bin immer noch ein wenig mit Variablentypen nicht vertraut, also fühlen Sie sich frei, mich zu korrigieren, wenn ich etwas falsch gemacht habe. –

+0

auch initialisiere ich das wie 'MCManager * mcmanager = [[MCManager alloc] init]; mcmanager.delegate = self; ' –

+0

Haben Sie versucht, diese beiden Zeilen certificateHandler (YES) zu vertauschen; [self.delete onRequestSuccess]; – jagdish

0

Diese Frage jedoch noch unbeantwortet technisch ist ich eine viel bessere Lösung gefunden, die geofire zu verwenden, war entlang mit meiner Feuerbasis. Ich hoffe, dies hilft anderen, die versuchen, Benutzer mit Geräten in der Nähe zu verbinden!

Verwandte Themen