无法委派代表使用performsegue

时间:2016-09-09 04:46:18

标签: objective-c delegates segue multipeer-connectivity

我是一般的编码新手所以请在解释问题时请耐心等待。我在我的应用程序中使用Multipeer连接,到目前为止只包含1个导航控制器和1个聊天界面。

我使用了一个单独的类来声明MCSession,MCnearbyadvert& MCnearbybrowser。在这个类中,我希望在收到连接证书时将一个委托用于将peformseguewithidentifier排队到聊天界面中。我已经阅读了很多类似的问题,不幸的是,没有一个解决方案有所帮助。

这是我的ViewController.h文件

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

@interface ViewController : UIViewController <MCManDelegate>


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

-(void)onRequestSuccess;
@end

以下是我的ViewController.m文件的相关部分

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

请记住,我已经尝试将[[MCManager alloc] init]放在代码的几个不同部分,但似乎无法找到合适的位置。

无论如何这是我的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 

这是我的MCManager.m文件和相关方法

 #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);


}

NSLog处理的邀请出现但是NSlog self.delegate产生(null),我知道这是不正确的,我知道它与我如何在viewcontroller.m文件中初始化委托有关,但我不知道如何要解决这个问题!非常感谢帮助...

2 个答案:

答案 0 :(得分:0)

试试这个:

全局声明MCManager * mcmanager并在viewDidLoad

中初始化

答案 1 :(得分:0)

这个问题在技术上仍然没有答案,但我找到了一个更好的解决方案,即使用geofire和我的firebase。希望这有助于其他试图让用户通过设备连接到附近的人!