如何在Swift中临时存储图像和字符串?

时间:2015-12-10 12:04:22

标签: ios swift class save nsobject

非常简单的问题 - 如何在Swift中暂时存储图像,字符串和双打?

我的应用程序从服务器获取ID,使用此ID应用程序可以从服务器请求下载图像,然后使用另一个请求可以获取String和Double。 然后app必须显示具有相应String和Double的图像。 应用程序被杀后应删除所有下载的数据,并在应用程序启动后再次下载。

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

例如,客户类:

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
}

然后保存并访问数据:

FBSDKMessageDialog

编辑我意识到使用NSUserData(在我的示例中)是存储数据的可能方式,我不确定这是不是一个好主意,在我的情况下

2 个答案:

答案 0 :(得分:1)

你想要什么被命名为“持久数据”。你可以通过很多方法实现这一点: 1.您可以使用第三方库 2.将数据保存在plist文件或CoreData或UserDefaults中。您可以创建包含所需内容的字典,例外情况是UI对象,如UIImage。您可以在NSData中转换UIImage,然后保存NSData。

最简单的方法是保存在NSUserDefaults中。如何执行此操作的示例如下:Save images in NSUserDefaults?

答案 1 :(得分:0)

我个人崇拜HanekeAwesomeCache。两者都是用Swift编写的。

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

iOS有许多持久性数据存储解决方案,例如:

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

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

快速查看代码后,第二个选项在您的情况下会更好。