【问题标题】:How to temporally store Images and Strings in Swift?如何在 Swift 中临时存储图像和字符串?
【发布时间】:2016-03-16 01:29:42
【问题描述】:

非常简单的问题 - 如何在 Swift 中临时存储图像、字符串和双精度值?

我的应用程序从服务器获取 ID,使用此 ID 应用程序可以从服务器请求下载图像,然后通过另一个请求可以获取 String 和 Double。 然后应用程序必须显示具有相应字符串和双精度的图像。 所有下载的数据应在应用被终止后删除,并在应用启动后重新下载。

使用自定义类是个好主意吗?

例如,客户类:

class UserInformation: NSObject {
var string: String
var double: Double
var image: String

init(string: String, double: Double, image: String) {
    self.string = string
    self.double = double
    self.image = image
    }
}

然后保存和访问数据:

var info = [UserInformation]()

func save() {
     //Alamofire functions to download image and string, double values goes here

     var newImage = //Downloaded image from server
     var newString = //Downloaded String from server
     var newDouble = //Downloaded Double from server

     //Save image
     let imageName = NSUUID().UUIDString
     let imagePath = getDocumentsDirectory().stringByAppendingPathComponent(imageName)
     if let jpegData = UIImageJPEGRepresentation(newImage, 80) {
         jpegData.writeToFile(imagePath, atomically: true)
     }

     let userInfo = UserInformation(string: newString, double: newDouble, image: imageName)
     info.append(userInfo)
 }

     func load() {
     //For ex. I am using [0], although in my app
     //it would be for _ in _ loop to access all existing values
     let info = UserInformation[0]
     string.text = info.string
     double.double = info.double
     let path = getDocumentsDirectory().stringByAppendingPathComponent(info.image)
     imageView.image = UIImage(contentsOfFile: path)
}

func getDocumentsDirectory() -> NSString {
    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let documentsDirectory = paths[0]
    return documentsDirectory
}

编辑我意识到使用 NSUserData(如我的示例)是存储数据的可能方式,我不确定这是否是一个好主意,就我而言

【问题讨论】:

  • 是的,可能,虽然我不确定该使用什么。我读过 NSUserDefaults 不能很好地存储超过 100Kb 的数据?
  • 我发现了两种将照片保存到文档或照片库的替代方法,它们都不是我想要的,因为照片将在应用程序运行时使用,并且通常在应用程序关闭后不会再次使用。

标签: ios swift class save nsobject


【解决方案1】:

我个人很喜欢HanekeAwesomeCache。两者都是用 Swift 编写的。

关于数据持久性的注意事项:

iOS 有很多持久化数据存储方案,例如:

等等

但我怀疑您实际上不想将任何东西存储更长的时间。我认为你试图实现的已经是默认的 iOS 行为。根据您的数据的复杂程度,您可以:

  • 使用上述示例(以防您的数据非常复杂)- 您可以存储所有数据并在应用启动时将其擦除。
  • 重构为singleton pattern 你的UserInformation。这将使您的 UserInformation 实例持续存在,直到您的应用被杀死。

快速查看您的代码后,第二个选项更适合您的情况。

【讨论】:

  • 我是编程新手,所以为了清楚起见,您建议将所有数据(图像/字符串/双精度)存储在缓存中?
【解决方案2】:

您想要的是名为“持久数据”。您可以通过多种方法实现这一点: 1.可以使用第三方库 2. 将数据保存在 plist 文件或 CoreData 或 UserDefaults 中。你可以创建一个包含你想要的任何东西的字典,例外是 UI 对象,如 UIImage。您可以在 NSData 中转换 UIImage,然后保存 NSData。

最简单的方法是保存在 NSUserDefaults 中。一个如何做到这一点的例子是:Save images in NSUserDefaults?

【讨论】:

  • NSUserDefaults 可能是最简单的,这就是为什么我会考虑它,但我已经读到在 NSUserDefaults 中存储超过 100Kb 的数据不是一个好主意?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-15
  • 2020-09-04
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多