0

У меня есть приложение, использующее Multipeer Connectivity для отправки строки с одного устройства iOS на другое устройство iOS. Он работает и не работает.Сообщение Objective-C было отправлено на объект deallocated '__NSDictionaryI' (зомби) по адресу 0x1

приложение довольно много приложение видно на учебник по этой ссылке: http://www.appcoda.com/intro-multipeer-connectivity-framework-ios-programming/

Иногда приложение будет отправлять около 30 сообщений, а затем падает, в другое время, это приведет к краху на 1-ом или 2-ом сообщении.

Xcode дает мне EXC_BAD_ACCESS для краха.

Я использовал NSZombie для оказания некоторой помощи, и он предоставил мне нижеследующее, но я достаточно новый и неспособный понять причину сбоев.

ScreenShot of NSZombie

I'f аварии связано с NSDictionary, есть только 2 в моем приложении:

-(void)session:(MCSession *)session peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state{ 
    NSDictionary *dict = @{@"peerID": peerID, 
          @"state" : [NSNumber numberWithInt:state] 
          }; 

    [[NSNotificationCenter defaultCenter] postNotificationName:@"MCDidChangeStateNotification" 
                 object:nil 
                 userInfo:dict]; 
} 


-(void)session:(MCSession *)session didReceiveData:(NSData *)data fromPeer:(MCPeerID *)peerID{ 
    NSDictionary *dict = @{@"data": data, 
          @"peerID": peerID 
          }; 

    [[NSNotificationCenter defaultCenter] postNotificationName:@"MCDidReceiveDataNotification" 
                 object:nil 
                 userInfo:dict]; 
} 

Любые предложения?

+0

У вас есть указатель на объект, который не является. Это, несомненно, было, но потом оно получилось «собранным», потому что указатель проблемы не был «сильным» (или несколькими похожими только более запутанными сценариями). –

+0

Чтобы узнать, где это происходит, узнайте, как получить и интерпретировать «трассировку стека исключений». –

+2

FWIW, что учебник, с которым вы связались, довольно беден, и вам, вероятно, следует искать в другом месте хороший пример MPC. Если я найду его, я отправлю его. – ChrisH

ответ

-1

Зомби обычно приходят, когда вы пытаетесь получить доступ к любому освобожденному объекту.

Если вы используете ARC, вам не нужно много волноваться о Zombies, код X делает это за вас, но есть случаи, когда зомби также входят в проект ARC. У меня никогда не было такой проблемы.

Если вы используете проект без ARC, вам необходимо освободить объекты вручную.

Как видно из сообщения об ошибке, вы использовали объект словаря, который еще не выделен или освобожден, и вы пытаетесь использовать его снова.

Если вы хотите посмотреть, где находится зомби, нажмите на стрелку, которая отображается после сообщения в сообщении. Вы будете перенаправлены на линию, которая вызвала ваш зомби.

Пожалуйста, обновите свой код в соответствии с этим.

Надеюсь, это вам поможет.

+0

Спасибо за ваш ответ, нажав на следующую стрелку, он показывает «Неизвестно», а затем следующая стрелка показывает «Завершена»? – Manesh

+2

Если вы используете ARC, вы определенно ** ** должны беспокоиться о зомби. –

+0

@HotLicks: Насколько я работал до сих пор, зомби никогда не приходили в мой проект ARC. Возможно, я ошибаюсь, поэтому вы можете исправить ошибку? Спасибо ... – Manthan

 Смежные вопросы

  • Нет связанных вопросов^_^