2015-09-18 11 views
5

Hier ist mein Code:Freigabe bestimmte Dateitypen (einschließlich zip) in Cocoa mit NSSharingServiceNameComposeMessage

  NSSharingService *service = [NSSharingService sharingServiceNamed: NSSharingServiceNameComposeMessage]; 
      tempURL = [NSURL fileURLWithPath:[NSHomeDirectory() stringByAppendingPathComponent:@"test.zip"]] 
      [service performWithItems:@[@"test", tempURL]]; 

Das Meldungsfenster richtig angezeigt wird, sowie die ‚Test‘ Text, aber die Datei nicht ist enthalten in der Nachricht.

Was funktioniert:

  • Ich weiß, dass die URL in Ordnung ist, weil es richtig angezeigt wird, wenn der Dienst NSSharingServiceNameComposeEmail statt
  • die Zip-Datei ist gültig benannt sind; es ist eine Testdatei, die ich bereits an einem bekannten Ort verwende, und ich habe bereits überprüft, dass sie richtig erweitert werden kann; es ist auch eine sehr kleine Datei
  • Ich weiß, eine Nachricht kann eine Datei angehängt haben: das obige funktioniert für PDFs, Seiten Dokumente, etc ...
  • Ich weiß mein Setup für Nachrichten ist in Ordnung, und es kann mit ZIP-Dateien arbeiten : die Taste funktioniert in Finder ‚teilen‘, wenn sie mit einer ZIP-Datei und wählen Sie die ‚Nachricht senden‘ Option

ähnliche Probleme verwendet fein:

  • unbekannte Dateitypen auch nicht funktionieren
  • Gleiches Problem bei der Verwendung des Airdrop-Dienstes e NSSharingServiceNameSendViaAirDrop

Irgendwelche Ideen, was ich sonst noch versuchen könnte? Vielen Dank!

Antwort

2

Anscheinend können Sie eine Zip-Datei teilen, aber es wird nicht auf dem Aktienblatt angezeigt.

Ich habe es getestet und als ich die Nachricht an mich selbst gesendet habe, habe ich die Zip-Datei angehängt.

- (IBAction)shareZipFile:(id)sender { 
    NSOpenPanel *openPanel = [NSOpenPanel openPanel]; 
    openPanel.allowedFileTypes = @[@"zip"]; 
    openPanel.prompt = @"Share"; 
    [openPanel runModal]; 

    NSSharingService *service = [NSSharingService sharingServiceNamed:NSSharingServiceNameComposeMessage]; 
    NSArray *items = @[openPanel.URL.lastPathComponent.stringByDeletingPathExtension, openPanel.URL]; 

    if (![service canPerformWithItems:items]) { 
     NSLog(@"Can't share that kind of stuff, sorry!"); 
     return; 
    } 

    [service performWithItems:items]; 
} 
+1

In der Tat und duh! Danke für deine Antwort. Es war verwirrend, weil der Finder ** das Symbol für eine Zip-Datei anzeigt. – charles

Verwandte Themen