-2

我目前在 Xcode 中遇到 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:]] 方法的一些问题:

在我的 iPhone 应用程序中,我正在从服务器下载一个 .txt 文件并像这样解析它:

NSString * idHelper = [allLines objectAtIndex:18];
appId1 = [idHelper stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

“allLines”是一个数组,其中包含 .txt 文件的所有内容。

“appId1”是一个 NSString。

在上面的代码中,我将 appId1 设置为这个 URL:http: //itunes.apple.com/app/id343200656/

在我的 UIViewController 的 .xib 中,我使用 UIButton 调用以下方法:

- (IBAction)downloadApp:(id)sender { 

    NSLog(@"downloadApp1");

   [[UIApplication sharedApplication] openURL:[NSURL URLWithString:appId1]];
}

此方法应打开移动 App Store 并显示链接中的应用程序。

但是每次我调用这个方法时,应用程序都会崩溃,我就是不知道为什么。

谁能帮我解决这个问题?非常感谢!

编辑:这是崩溃日志。对不起。

`libsystem_c.dylib`memmove$VARIANT$Swift:
0x39df7006:  push   {r7, lr}
libsystem_c.dylib`memcpy$VARIANT$Swift + 2:
0x39df7008:  mov    r7, sp
0x39df700a:  subs   r3, r0, r1
0x39df700c:  beq.w  0x39df72ae           ; memcpy$VARIANT$Swift + 680
0x39df7010:  mov    r12, r0
0x39df7012:  cmp    r3, r2
0x39df7014:  blo.w  0x39df72b0                ; memcpy$VARIANT$Swift + 682
0x39df7018:  subs.w r3, r2, #32
0x39df701c:  bls.w  0x39df72a0                ; memcpy$VARIANT$Swift + 666
0x39df7020:  orr.w  lr, r0, r1
0x39df7024:  orr.w  lr, lr, r2
0x39df7028:  ands   lr, lr, #15
0x39df702c:  bne    0x39df7048                ; memcpy$VARIANT$Swift + 66
0x39df702e:  subs   r3, #32
0x39df7030:  vld1.8 {d0, d1, d2, d3}, [r1, :128]!
0x39df7034:  vst1.8 {d0, d1, d2, d3}, [r12, :128]!
0x39df7038:  bhi    0x39df702e                ; memcpy$VARIANT$Swift + 40
0x39df703a:  add    r1, r3
0x39df703c:  vld1.8 {d0, d1, d2, d3}, [r1, :128]
0x39df7040:  add    r12, r3
0x39df7042:  vst1.8 {d0, d1, d2, d3}, [r12, :128]
0x39df7046:  pop    {r7, pc}
0x39df7048:  tst.w  r12, #15
0x39df704c:  itttt  ne
0x39df704e:  ldrbne r3, [r1], #1
0x39df7052:  strbne r3, [r12], #1
0x39df7056:  subne  r2, #1
0x39df7058:  bne    0x39df7048                ; memcpy$VARIANT$Swift + 66
0x39df705a:  and    lr, r1, #15
0x39df705e:  bic    r1, r1, #15
0x39df7062:  subs.w r3, r2, #32`

应用程序在“0x39df704e:ldrbne r3,[r1],#1”处崩溃,并带有 EXC_BAD_ACCESS(代码=1,地址=0x0)。

这是启用了僵尸对象的崩溃日志:

libobjc.A.dylib`objc_msgSend:
0x399955c0:  teq.w  r0, #0
0x399955c4:  beq    0x39995606                ; objc_msgSend + 70
0x399955c6:  push.w {r3, r4}
0x399955ca:  ldr    r4, [r0]
0x399955cc:  lsr.w  r9, r1, #2
0x399955d0:  ldr    r3, [r4, #8]
0x399955d2:  add.w  r3, r3, #8
0x399955d6:  ldr    r12, [r3, #-8]
0x399955da:  and.w  r9, r9, r12
0x399955de:  ldr.w  r4, [r3, r9, lsl #2]
4

1 回答 1

1

如果你不使用ARC,你应该添加一个retain

appId1 = [[idHelper stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] retain];

作为构造函数stringByAddingPercentEscapesUsingEncoding:返回一个自动释放的对象

于 2013-05-30T17:54:13.013 回答