2

アプリで ios7 のマルチピア接続を使用しています。ファイルの送受信はまったく問題なく動作しますが、ユーザーがアプリ内からコントロール センター (または設定) にアクセスし、bluetooth または 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];
}

teardownで、updateマルチピア スタックを再構築します。

于 2014-02-04T22:56:14.810 に答える