2

我在我的应用程序的 ios7 中使用多点连接。文件发送和接收工作绝对正常,但是当用户从我的应用程序中访问控制中心(甚至设置)并关闭蓝牙或 wifi 时,文件交换停止工作。当用户将他们两个都重新打开时,它仍然不起作用。为了让它们再次工作,用户必须关闭并重新打开应用程序。

文件以这种方式发送:

MCSession *session = [[MCSession alloc]
                                          initWithPeer:key];


                    NSCalendar *gregorian = [[NSCalendar alloc]
                                             initWithCalendarIdentifier:NSGregorianCalendar];

                    NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
                    dateComponents.year = 2100;
                    dateComponents.month = 1;
                    dateComponents.day = 1;
                    dateComponents.hour = 0;
                    dateComponents.minute = 0;
                    dateComponents.second = 0;

                    NSDate *referenceDate = [gregorian dateFromComponents: dateComponents];

                    NSDate *now = [NSDate date];
                    NSTimeInterval interval = [now timeIntervalSinceDate:referenceDate];

                    NSData *Recording = [NSData dataWithContentsOfFile:myFilePath];


                    NSString* str = [NSString stringWithFormat:@"%@.ext", button.titleLabel.text];


                    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
                    [dict setObject:str forKey:@"fileName"];
                    [dict setObject:@"Recording" forKey:@"fileType"];
                    [dict setObject:Recording forKey:@"FileData"];

                    NSData *myData = [NSKeyedArchiver archivedDataWithRootObject:dict];

                    [browser invitePeer:key
                              toSession:session
                            withContext:myData
                                timeout:interval];

用户可以随时使用以下命令重新加载设备:

[browser startBrowsingForPeers];

我认为问题在于超时,但我不确定。

4

2 回答 2

2

- (void)applicationDidBecomeActive:(UIApplication *)application您需要在应用委托方法中重新初始化所有与 Multipeer Connectivity Framework 相关的实例。当您的应用在控制中心打开然后关闭后再次激活时,将调用该方法。

于 2013-09-28T16:01:59.697 回答
1

我建议您改为监视连接状态的更改,并在您检测到那里的更改时拆除或重新初始化。这是我使用出色的可达性工具包解决同样问题的方法:

- (void)monitorReachability
{
    // Allocate a reachability object
    self.reachability = [Reachability reachabilityWithHostname:@"www.google.com"];

    [[NSNotificationCenter defaultCenter] addObserverForName:kReachabilityChangedNotification object:nil queue:nil usingBlock:^(NSNotification *note) {
        Reachability *reachability = note.object;
        if ( reachability.isReachable ) {
            self.isPhysicallyConnected = YES;
            [self updateNearbyService];
        } else {
            self.isPhysicallyConnected = NO;
            [self tearDownNearbyService];
        }
    }];

    // Start the notifier, which will cause the reachability object to retain itself!
    [self.reachability startNotifier];
}

在其中teardownupdate您将重建您的 Multipeer 堆栈。

于 2014-02-04T22:56:14.810 回答