NSSharingService: Как сравнить с константами?

Я хочу что-то сделать, когда пользователь поделился

- (void)sharingService:(NSSharingService *)sharingService didShareItems:(NSArray *)items
{
    BOOL isSafariReadingList = [sharingService.description rangeOfString:NSSharingServiceNameAddToSafariReadingList].location != NSNotFound;
}

Я не могу найти недвижимость на NSSharingService что я могу сравнить с константами. Я что-то пропустил?!

2 ответа

Поскольку, кажется, нет ответа на этот вопрос (подано http://openradar.appspot.com/16114564), я создал категорию

@implementation NSSharingService (ActivityType)

- (NSString*)activityType {
    NSRange range = [self.description rangeOfString:@"\\[com.apple.share.*\\]" options:NSRegularExpressionSearch];
    range.location++; // Start after [
    range.length -= 2; // Remove both [ and ]
    return [self.description substringWithRange:range];
}
@end

тогда вы можете использовать это следующими способами:

    [[sharingService activityType] isEqualToString:NSSharingServiceNameAddToSafariReadingList];

    [@[NSSharingServiceNameAddToSafariReadingList, NSSharingServiceNameAddToIPhoto]
         containsObject:[sharingService activityType]];

Я полагаю, Apple просто не думала, что мы хотим знать, какой сервис люди выбирают из Picker.

Очевидно, опасно анализировать эту "com.apple.share.System", но я вижу единственный способ избежать набора rangeOfString || rangeOfString || rangeOfString….,

Для получения дополнительной информации проверьте https://github.com/stuffmc/SharingPicker

Кроме того, в качестве ссылки, вот некоторые из значений этих NSSharingServiceName* константы, все начинающиеся с com.apple.share.

PostOnFacebook                  Facebook.post
PostOnTwitter                   Twitter.post
PostOnSinaWeibo                 SinaWeibo.post
PostOnTencentWeibo              TencentWeibo.post
PostOnLinkedIn                  LinkedIn.post
ComposeEmail                    Mail.compose
ComposeMessage                  Messages.compose
SendViaAirDrop                  AirDrop.send
UseAsTwitterProfileImage        Twitter.set-profile-image
UseAsFacebookProfileImage       Facebook.set-profile-image
UseAsLinkedInProfileImage       LinkedIn.set-profile-image
PostImageOnFlickr               Video.upload-image-Flickr
AddToSafariReadingList          System.add-to-safari-reading-list
AddToIPhoto                     System.add-to-iphoto

Эквивалент этой проверки работает в моем коде Swift:

sharingService == NSSharingService(named: NSSharingServiceNameAddToSafariReadingList)
Другие вопросы по тегам