2014-04-23 5 views
4

iPad 및 iPod touch 연결에 iOS 7 멀티 피어 기술을 사용하고 있습니다. 하지만 iPod touch 나 iPad가 잠자기 모드로 전환 될 때마다 멀티 피어가 백그라운드 모드로 작동하지 않기 때문에 연결이 끊어 지지만, 다시 발견하면 MCBrowserViewController 목록에 iPod 이름이 두 번 표시됩니다. 모든 샘플 코드와 모든 코드에서이 버그를 해결하는 방법을 아는 것과 동일한 문제가 있습니다.iOS 동일한 장치 이름을 두 번 표시하는 다중 피어 연결

MCBrowserViewController 장치를 연결하고 다른 장치가 연결을 허용하는 경우에도 MCBrowserViewController이 계속 연결되어 나타나고 "Done" 단추가 비활성화되어 있어도 이상한 문제가 있습니다. 나는 MCBrowserViewController을 사용하고 있습니다. 그래서이 코드는 사용자 정의 코드가 아니므로, 애플의 문제입니다.

또한 앱이 절전 모드에서 다시 활성 상태가되면 장치에 직접 연결하는 방법을 알고 있습니까?

답변

0

나는 똑같은 문제가 있었고 이것은 어떻게 해결 했는가? 제 경우에는 UIViewController를 사용하여 연결을 처리하고 할당 된 뷰를 열고보기를 초기화 할 때마다 -viewDidLoad가 매번 호출됩니다 -, viewDidLoad에서 나는 처음에 MCPeerID & MCSession을 처음으로 만들었습니다. 문제가 있습니다.이 때문에 다중 피어 연결이 두 번 나타나는 것을 볼 수 있습니다. 따라서 AppDelegate 또는 전역 클래스에서 MCPeerID & MCSession의 초기화를 한 번만 수행하여 해결했습니다.

1

동일한 이름을 두 번 발견하는 것은 세션을 시작할 때마다 peerID (withDisplayName)를 "초기화"하기 때문입니다. 사과 설명서에서 알려진 버그이며 그렇게해서는 안됩니다. 대신 peerID를 NSUserDefaults와 같이 어딘가에 저장하고 세션을 초기화 할 때 peerID가 있는지 확인한 다음로드하고 그렇지 않으면 만들고 저장하십시오.

간단한 코드는 다음과 같이 표시됩니다 세션의 초기화에서 대체 :

_peerID = [[MCPeerID alloc] initWithDisplayName:XXX]; 

로 : 물론

//If there is no PeerID save, create one and save it 
if ([[NSUserDefaults standardUserDefaults] dataForKey:@"PeerID"] == nil) 
{ 
    _peerID = [[MCPeerID alloc] initWithDisplayName:XXX]; 
    [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:_peerID] forKey:@"PeerID"]; 
} 
//Else, load it 
else 
{ 
    _peerID   = [NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] dataForKey:@"PeerID"]]; 
} 

, 당신은보다 복잡한 코드를 만들 수 등 할당을 해제하고 이름을 변경하려는 경우 동적 변수에서 만듭니다.