我是一般的编码新手所以请在解释问题时请耐心等待。我在我的应用程序中使用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文件中初始化委托有关,但我不知道如何要解决这个问题!非常感谢帮助...
答案 0 :(得分:0)
试试这个:
全局声明MCManager * mcmanager并在viewDidLoad
中初始化答案 1 :(得分:0)
这个问题在技术上仍然没有答案,但我找到了一个更好的解决方案,即使用geofire和我的firebase。希望这有助于其他试图让用户通过设备连接到附近的人!