我正在研究iOS6上的cocos2d项目,当我尝试在twitter上分享内容时,它会不时崩溃。
当我调用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"]];
这个问题再一次引人注目。奇怪吧?
答案 0 :(得分:0)
最后我明白了!问题是消息文本上的返回字符。最奇怪的是它似乎只发生在某些文本长度和参数集上。
我花了几个小时来解决问题并做出一个导致应用程序崩溃的示例。它只在某些情况下崩溃。例如,根据我提供的文字,如果您发表评论 addURL ,它就不会崩溃。
请注意以下代码中的 setInitialText ,几乎在文本的末尾有一个 \ n 字符。这是一个小问题......
[twitterViewController setInitialText:@"########################## ###########? ########### ########: #######\n## #######"];
[twitterViewController addURL:[NSURL URLWithString:@"http://google.com"]];
现在,如果您在问题中的相同代码上替换此行,则应用程序将在某些Twitter视图解散后崩溃。
我创建了一个新项目并粘贴了相同的行......它崩溃了。它可能是 SLComposeViewController
上的错误