SLTwitterComposeViewController消息发送到解除分配的实例

时间:2013-05-13 19:32:50

标签: objective-c ios6 cocos2d-iphone slcomposeviewcontroller

我正在研究iOS6上的cocos2d项目,当我尝试在twitter上分享内容时,它会不时崩溃。

  • 仅在物理设备上崩溃(iOS 6.1.3)
  • 它在模拟器上运行 (iOS 6.1)
  • 使用[twitterViewController addImage:]时出现问题
  • 我正在使用 ARC
  • 更新:问题是正文上的 \ n 字符

当我调用shareOnTwitter函数时,它会打开twitter共享。我可以关闭或发布,它可以解除视图。但是第二次,第三次甚至更多次按下按钮时它会崩溃 EXC_BAD_ACCESS

使用启用Zombie Objects 我收到此错误:

  

[SLTwitterComposeViewController respondsToSelector:]:发送到解除分配的实例的消息

它不会在我的代码上的任何特定行上崩溃。

堆栈:

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];
}

感谢您的帮助!

更新

当我评论添加图像的行时,问题就解决了:

//[twitterViewController addImage:renderedImage];

这让我怀疑我的渲染图像功能,所以我用以下代码替换了

[twitterViewController addImage:[UIImage imageNamed:@"Icon@2x.png"]];

这个问题再一次引人注目。奇怪吧?

1 个答案:

答案 0 :(得分:0)

最后我明白了!问题是消息文本上的返回字符。最奇怪的是它似乎只发生在某些文本长度和参数集上。

我花了几个小时来解决问题并做出一个导致应用程序崩溃的示例。它只在某些情况下崩溃。例如,根据我提供的文字,如果您发表评论 addURL ,它就不会崩溃。

请注意以下代码中的 setInitialText ,几乎在文本的末尾有一个 \ n 字符。这是一个小问题......

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

现在,如果您在问题中的相同代码上替换此行,则应用程序将在某些Twitter视图解散后崩溃。

我创建了一个新项目并粘贴了相同的行......它崩溃了。它可能是 SLComposeViewController

上的错误