EXC_BAD_ACCESS码= 2个=地址为0x0

问题描述:

我使用的是UIActivityViewController在我的应用程序,我得到一个EXC_BAD_ACCESS码= 2坠毁在iOS 6,而不是iOS的7这里是代码:EXC_BAD_ACCESS码= 2个=地址为0x0

NSArray *activityItems; 

NSString *shareText = [NSString stringWithFormat:NSLocalizedString(@"Listen to", nil), self.currentChannel.title, self.currentChannel.itunesUrl]; 

if (self.currentChannel.mediumThumbnailImage) 
{ 
    activityItems = @[shareText, self.currentChannel.mediumThumbnailImage]; 
} 
else 
{ 
    activityItems = @[shareText]; 

} 

UIActivityViewController *activityController = [[UIActivityViewController alloc] 
               initWithActivityItems:activityItems 
               applicationActivities:nil]; 

[activityController setCompletionHandler:^(NSString *activityType, BOOL completed) { 
    // once they have shared, check where they shared the content for analytics 
    if (completed) 
    { 
     NSString *actionName = nil; 
     NSString *socialName = nil; 
     if ([activityType isEqualToString:kMailActivity]) { 
      actionName = kSocialEmail; 
      socialName = kMail; 
     } else if ([activityType isEqualToString:kMessageActivity]) { 
      actionName = kSocialChat; 
      socialName = kMessage; 
     } else if ([activityType isEqualToString:kFacebookActivity] || [activityType isEqualToString:kTwitterActivity]) { 
      actionName = kSocialShare; 
      socialName = kFacebook; 
     } 

     if (actionName && socialName) 
     { 
      NSDictionary *data = @{kSocialName: socialName, kSocialContent: shareText}; 
      if (data) 
      { 
       [ADBMobile trackAction:actionName data:data]; 
      } 
     } 
    } 
}]; 

if (activityController) 
{ 
    [activityController setExcludedActivityTypes: 
    @[UIActivityTypeAssignToContact, 
     UIActivityTypePrint, 
     UIActivityTypePostToWeibo, 
     UIActivityTypeSaveToCameraRoll, 
     UIActivityTypeAirDrop]]; 

    [self presentViewController:activityController 
         animated:YES completion:nil]; 
} 

我已经使用NSZombies缩小了发生崩溃的位置,并且在iOS 6中拨打setExcludedActivityTypes:时发生了这种情况。我知道这个错误意味着某个对象已被过度发布,并且我正在触摸不属于我的内存。我不明白的是为什么这次崩溃只发生在iOS 6中。有人看到可能导致这种情况的东西吗?

+2

'UIActivityTypeAirDrop'仅在iOS7以后可用。那可能是造成这次事故的原因。看到那里:https://developer.apple.com/library/ios/documentation/uikit/reference/UIActivity_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40011974-CH1-SW13 – Larme

+0

好吧,文档说它自iOS7起可用。如果你不在测试中添加它,它是否仍然崩溃? – Larme

UIActivityTypeAirDrop只适用于iOS的7,而不是在iOS的6

您可以检查这样一个恒定的可用性:

if(&UIActivityTypeAirDrop) { 
    // UIActivityTypeAirDrop is available 
} else { 
    // Its not available. Don't use it. 
} 

(我在做这个社会的维基,因为我刚刚从上面的用户Larme复制了评论。)

+0

感谢您的帮助!我不能相信我错过了这一点。 –