質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

2034閲覧

Share Extensionで画像を保存したい

hodoru3sei

総合スコア284

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/07/16 09:49

編集2022/01/12 10:55

はじめに

Share Extensionで画像の保存を行いたいと考えています。
Teratailで過去の質問を調べたところ似た様な質問が2つあったのでそれぞれ試してみたのですが保存できませんでした。

参考にした記事

Swiftでアプリから画像を取得したい
share extensionのdidSelectPostにおいて,画像の取得ができません

検証したコード

Share Extensionでpostを受け取る部分のコード

Swift

1 override func didSelectPost() { 2 let inputItem: NSExtensionItem = self.extensionContext?.inputItems[0] as! NSExtensionItem 3 let itemProvider = inputItem.attachments![0] 4 5 if itemProvider.hasItemConformingToTypeIdentifier("public.url"){ 6 itemProvider.loadPreviewImage(options: nil, completionHandler: { (url, error) in 7 if let image = url as? UIImage { 8 let userDefault = UserDefaults.standard 9 userDefault.set(image.pngData(), forKey: "img") 10 userDefault.synchronize() 11 } 12 self.extensionContext?.completeRequest(returningItems: [], completionHandler:nil) 13 }) 14 } 15 }

画像の保存を確認する部分(ViewController)

Swift

1 @IBOutlet weak var image: UIImageView! 2 override func viewDidLoad() { 3 super.viewDidLoad() 4 // Do any additional setup after loading the view. 5 let defaults = UserDefaults.standard 6 if defaults.object(forKey: "img") != nil { 7 let objects = defaults.object(forKey: "img") as? NSData 8 image.image = UIImage(data: objects! as Data) 9 } else { 10 print("保存されていません") 11 } 12 }

不明点

写真アプリやSafariで画像を検索しアプリにポストした場合hasItemConformingToTypeIdentifierの部分で弾かれて保存に失敗します。

googleのトップページを開いた状態でpostするとUserDefaultの部分まで行くのですがアプリ内のUserDefaultを確認すると値が保存されていません。

追記

** if itemProvider.hasItemConformingToTypeIdentifier("public.url")**の条件式をコメントアウトしてビルドしたところクラッシュはせず処理が進みました。
しかしUserDefaultへの保存はできていませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

すでに質問欄に乗っていますが、
https://teratail.com/questions/167501
で私がいろいろ調査した結果が残っていますので、それがすべてです(一番下のコードがおそらくゴール)。

投稿2019/07/24 08:44

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問