ユーザーがデバイス上でファイルを印刷できるiOSアプリケーションを作成しています。私のアプリケーションからは、iCloudドライブ、Dropboxなどの他のアプリで提供されているDocumentPicker
にアクセスしてデバイス上のファイルにアクセスできます。iOSからアプリケーションにファイルをインポートする
ここで、ユーザーは自分のアプリケーションとファイルを共有できます他のアプリケーション。私はAction Extension
を作成しました。 たとえば、写真アプリケーションで画像を選択してShare
を選択した場合、共有シートに自分の内線番号が表示されます。選択すると、そのファイルのURLも表示されます。次に、このファイルのzipファイルを作成してサーバーに送信します。しかし、問題は、zipファイルが常に空であることです。 )アクション拡張ののviewDidLoad(で
if itemProvider.hasItemConformingToTypeIdentifier(kUTTypeImage as String) {
itemProvider.loadItemForTypeIdentifier(kUTTypeImage as String, options: nil,
completionHandler: { (image, error) in
NSOperationQueue.mainQueue().addOperationWithBlock {
print("Image: \(image.debugDescription)")
//Image: Optional(file:///Users/guestUser/Library/Developer/CoreSimulator/Devices/00B81632-041E-47B1-BACD-2F15F114AA2D/data/Media/DCIM/100APPLE/IMG_0004.JPG)
print("Image class: \(image.dynamicType)")
//Image class: Optional<NSSecureCoding>
self.filePaths.append(image.debugDescription)
let zipPath = self.createZip(filePaths)
print("Zip: \(zipPath)")
}
})
}
そして、次のように私のcreateZip
機能は次のとおりです:私は使用していたコードは以下の通りである
func createZipWithFiles(filePaths: [AnyObject]) -> String {
let zipPath = createZipPath() //Creates an unique zip file name
let success = SSZipArchive.createZipFileAtPath(zipPath, withFilesAtPaths: filePaths)
if success {
return zipPath
}
else {
return "zip prepation failed"
}
}
は、私ができる方法はあります共有ファイルのジップを作成しますか?
'SSZipArchive'はエラーを返していますか?あなたは 'zipPath'への書き込みアクセス権と' filePaths'のすべてのパスへの読み取りアクセス権を持っていますか? – JAL
いいえ、間違いはありません。 'zipPath'にzipファイルを作成するので、' zipPath'に書き込みアクセス権があります。そして、 'filePaths'中のファイルは、デフォルトのPhotosアプリケーションからの画像ファイルです。ログにはファイルが前述の位置に存在しないと言われていますが、端末をナビゲートするとファイルが表示されます(シミュレータ用)。 –
'image.debugDescription'の使用は、画像へのファイルパスを取得する方法ではありません。最初に、完了ハンドラの実際のイメージタイプは何ですか? 'image.debugDescription'の出力は何ですか? – rmaddy