如何在通过共享扩展选择的 NSUserDefaults 中存储多个图像
Posted
技术标签:
【中文标题】如何在通过共享扩展选择的 NSUserDefaults 中存储多个图像【英文标题】:How to store multiple images in NSUserDefaults picked through share extension 【发布时间】:2017-01-31 07:45:02 【问题描述】:我目前为单张图片做的,效果很好。但我想选择多个图像并在应用程序中显示。任何人都可以帮助我。谢谢。
override func didSelectPost()
if let content = extensionContext!.inputItems[0] as? NSExtensionItem
let contentType = kUTTypeImage as String
if let contents = content.attachments as? [NSItemProvider]
for attachment in contents
if attachment.hasItemConformingToTypeIdentifier(contentType)
attachment.loadItemForTypeIdentifier(contentType, options: nil) data, error in
let url = data as! NSURL
if let imageData = NSData(contentsOfURL: url)
self.saveImage(imageData)
// Unblock the UI.
self.extensionContext!.completeRequestReturningItems([], completionHandler: nil)
将图像保存为用户默认值
func saveImage(imageData: NSData)
if let prefs = NSUserDefaults(suiteName: suiteName)
prefs.setObject(imageData, forKey: keyName)
在应用中阅读
if let prefs = NSUserDefaults(suiteName: suiteName)
if let imageData = prefs.objectForKey(keyName) as? NSData
drawCard(imageData)
我为数组修改了这个,但它不起作用。
override func didSelectPost()
if let content = extensionContext!.inputItems[0] as? NSExtensionItem
let contentType = kUTTypeImage as String
if let contents = content.attachments as? [NSItemProvider]
for attachment in contents
if attachment.hasItemConformingToTypeIdentifier(contentType)
attachment.loadItemForTypeIdentifier(contentType, options: nil) data, error in
let url = data as! NSURL
if let imageData = NSData(contentsOfURL: url)
galleryBucket[url] = imageData
self.saveImage(galleryBucket)
// Unblock the UI.
self.extensionContext!.completeRequestReturningItems([], completionHandler: nil)
将图像保存为用户默认值。
func saveImage(galleryBucket: [NSURL:NSData])
if let prefs = NSUserDefaults(suiteName: suiteName)
prefs.setObject(galleryBucket, forKey: keyName)
galleryBucket 的结果是 nil
if let prefs = NSUserDefaults(suiteName: suiteName)
if let galleryBucket = prefs.objectForKey(keyName) as? [NSURL:NSData]
for imageData in galleryBucket
drawCard(imageData.1)
【问题讨论】:
为什么不只保存一个 NSData 数组来存储图像数组? @BenjaminLowry 请检查已编辑的问题,我做错了什么吗? 我不知道你在用drawCard(imageData.1)
做什么,因为我不相信 imageData 是一个元组,但除此之外它看起来还不错。我能想到的唯一会导致它为零的是如果您的 suiteName
或 keyName
变量发生了变化。
drawCard(imageData.1) 会动态创建imageview,suiteName和keyName完全一样。
【参考方案1】:
UserDefaults 似乎不是保存图像的最佳位置..
看看这个: Save An Image To Application Documents Folder From UIView On ios
这就是您可以搜索特定文件扩展名的方式。 Getting list of files in documents folder
一旦你有了名字,这就是你检索它的方式。 Get image from documents directory swift
【讨论】:
以上是关于如何在通过共享扩展选择的 NSUserDefaults 中存储多个图像的主要内容,如果未能解决你的问题,请参考以下文章