iOS学习之Persist Data

来源:互联网 发布:网络商标注册 编辑:程序博客网 时间:2024/06/01 10:07

教程地址:https://developer.apple.com/library/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson10.html#//apple_ref/doc/uid/TP40015214-CH14-SW1

   app保存用户数据(Persist Data)的比较简单的方法是用NSCoding,NSCoding是一个协议,可以archive 对象或其他较简单的结构,获取的对象可以保存在本地,以便以后重新运用。

*(1)实现一个编码键(code key)的结构体

                    每个key对应需要保存对象的一个属性,如:

     

var name:String

    var photo:UIImage?

    var rating:Int

对应:

struct PropertyKey {

        staticlet nameKey = "name"

        staticlet photoKey = "photo"

        staticlet ratingKey = "rating"

    }

  (2)数据的类要继承两个协议::NSObject,NSCoding,

NSCoding是编码和解码的协议,主要是要实现两个方法:

  1. funcencodeWithCoder(aCoder:NSCoder): 为编码保存数据做准备,要用到aCoder.encodeObject(name,forKey:PropertyKey.nameKey)方法
  2. init(coderaDecoder: NSCoder) 解码提取数据时用,可以定义为requiredconvenienceinit?(coderaDecoder:NSCoder) 实现 aDecoder.decodeObjectForKey(key)
  3. (3) 创建保存数据的文件路径
    1. staticlet DocumentsDirectory = NSFileManager().URLsForDirectory(.DocumentDirectory,inDomains: .UserDomainMask).first!
    2. staticlet ArchiveURL = DocumentsDirectory.URLByAppendingPathComponent("meals")
    3. DocumentsDirectory是用户Document目录对应的URL,ArchiveURL是用Append(meals)方法后的URL
    4. (4)保存数据和获取本地数据的方法实现 save() load()
    5. (1)~(3)可以在数据类中实现,(4)应在_viewcontroller中实现
    6. save():NSKeyedArchiver.archiveRootObject(meals,toFile:Meal.ArchiveURL.path!),meals是数据类Meal的对象数组,Meal是数据类。保存数据用NSKeyedArchiver.archiveRootObject
    7. load():NSKeyedUnarchiver.unarchiveObjectWithFile, 其中注意类型转换 as
    8. (5) 在相应的地方调用save() load(),如在viewdiload()中load()数据,在数据被编辑发生改变的地方调用save()

0 0
原创粉丝点击