2014-02-15 46 views
2

我想要做的事,當用戶共享給NSSharingService:如何與常量進行比較?

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

我找不到NSSharingService任何財產,我可以比較的常量。我錯過了什麼?

+0

更不用說這是超級風險 - 「說明」可以在任何操作系統的更新變化:( –

回答

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]]; 

我想蘋果只是沒有認爲我們想知道從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 
+0

爲什麼不繼承NSSharingService並添加屬性? – Oded

0

此檢查工作的等效在我的斯威夫特代碼:

sharingService == NSSharingService(named: NSSharingServiceNameAddToSafariReadingList) 
相關問題