0

我正在 iOS6 上开发一个 cocos2d 项目,当我试图在 Twitter 上分享一些东西时,它时不时地崩溃。

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

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

使用Enable 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"]];

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

4

1 回答 1

0

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

我花了几个小时来解决问题并制作一个导致应用程序崩溃的示例。它仅在某些情况下崩溃。例如,对于我提供的文本,如果您评论addURL它不会崩溃。

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

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

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

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

于 2013-05-15T05:05:54.930 回答