Код EXC_BAD_ACCESS =2 адреса =0x0
Я использую UIActivityViewController в своем приложении и получаю сбой кода EXC_BAD_ACCESS =2 на iOS 6, но не на 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. Кто-нибудь видит что-то, что может быть причиной этого?
1 ответ
Решение
UIActivityTypeAirDrop
доступно только в iOS 7, а не в iOS 6.
Вы можете проверить наличие постоянной, как это:
if(&UIActivityTypeAirDrop) {
// UIActivityTypeAirDrop is available
} else {
// Its not available. Don't use it.
}
(Я делаю это вики-сообществом, потому что я только что скопировал комментарий от пользователя Larme выше.)