0

Я работаю над проектом cocos2d на iOS6, и он время от времени разбивается, пока я пытаюсь поделиться чем-то на Twitter.Сообщение SLTwitterComposeViewController, отправленное на освобожденный экземпляр

  • Это падает только на физическом устройстве (IOS 6.1.3)
  • Она работает без каких-либо проблем на тренажере (IOS 6.1)
  • Проблема возникает тогда, когда [twitterViewController addImage:] является используется
  • Я использую ARC
  • Обновление: проблема характер \ п на теле

Когда я вызываю функцию shareOnTwitter, он открывает свою долю твиттер. Я могу закрыть или отправить, и он отклонит представление. Но второй, третий или даже более раз вы нажимаете кнопку, с которой он падает EXC_BAD_ACCESS.

С Enable Zombie Objects Я получаю эту ошибку:

[SLTwitterComposeViewController respondsToSelector:]: message sent to deallocated instance

Это не врезаться в какой-либо конкретной линии на моем коде.

Stack:

libobjc.A.dylib`objc_msgSend: 
0x3ad3b5a0: teq.w r0, #0 
0x3ad3b5a4: beq 0x3ad3b5e6    ; objc_msgSend + 70 
0x3ad3b5a6: push.w {r3, r4} 
0x3ad3b5aa: ldr r4, [r0] 
0x3ad3b5ac: lsr.w r9, r1, #2 
0x3ad3b5b0: ldr r3, [r4, #8] <-------- Thread 1: EXC_BAD_ACCESS 
0x3ad3b5b2: add.w r3, r3, #8 
0x3ad3b5b6: ldr r12, [r3, #-8] 
0x3ad3b5ba: and.w r9, r9, r12 
0x3ad3b5be: ldr.w r4, [r3, r9, lsl #2] 

Код:

- (void)shareOnTwitter { 

    UIImage *renderedImage = ...; 

    NSString *text = ...; 

    SLComposeViewController *twitterViewController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]; 
    [twitterViewController setInitialText:text]; 
    [twitterViewController addImage:renderedImage]; 
    [twitterViewController addURL:[NSURL URLWithString:kAPPURL]]; 
    [twitterViewController setCompletionHandler:^(SLComposeViewControllerResult result){ 

     switch (result) { 
      case SLComposeViewControllerResultCancelled: 
       break; 
      case SLComposeViewControllerResultDone: 
       break; 
      default: 
       break; 
     } 

     [[CCDirector sharedDirector] dismissViewControllerAnimated:YES completion:nil]; 
    }]; 

    [[CCDirector sharedDirector] presentViewController:twitterViewController animated:YES completion:nil]; 
} 

Спасибо за вашу помощь!

UPDATE:

Проблема решена, когда я комментирую строку, которая добавляет изображение:

//[twitterViewController addImage:renderedImage]; 

Что заставило меня усомниться в моей визуализации функции изображения, поэтому я заменил линию:

[twitterViewController addImage:[UIImage imageNamed:@"[email protected]"]]; 

И проблема заметна еще раз. Странно?

+0

какая линия падает? стек вызовов? ARC или MRC? – LearnCocos2D

+0

@ LearnCocos2D Я обновил сообщение более подробно. Я создам новый проект, чтобы проверить это позже, может быть, я что-то упустил. – Firula

ответ

0

Наконец-то я понял! Проблема заключалась в обращении на текст сообщения. Самое странное, что, похоже, это происходит только с определенной длиной текста и наборами параметров.

Потребовалось несколько часов, чтобы закрыть проблему и сделать пример, который приводит к сбою приложения. Он падает только в определенных обстоятельствах. Например, с текстом, который я предоставляю, если вы прокомментируете addURL, это не сработает.

Обратите внимание на setInitialText в следующем коде, почти в конце текста есть \ п характер. Это крошечная проблема ...

[twitterViewController setInitialText:@"########################## ###########? ########### ########: #######\n## #######"]; 
[twitterViewController addURL:[NSURL URLWithString:@"http://google.com"]]; 

Теперь, если вы замените эти строки на ту же коду, который в этом вопросе, то приложение будет врезаться после некоторого вид твиттера увольняет.

Я создал новый проект и вставлю эти же строки ... он сработает. Это может быть ошибка на SLComposeViewController