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)