Код 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 выше.)

Другие вопросы по тегам