我在我的应用程序中使用 UIActivityViewController,我在 iOS 6 上遇到 EXC_BAD_ACCESS code=2 崩溃,但在 iOS 7 上没有。这是代码:
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 来缩小崩溃发生的范围,当我setExcludedActivityTypes:
在 iOS 6 中调用时就会发生这种情况。我知道这个错误意味着一个对象已被过度释放,并且我正在触及不属于我的内存。我不明白为什么这种崩溃只发生在 iOS 6 中。有没有人看到可能导致这种情况的东西?