ios swift 归档解档遇到的坑 3-30
来源:互联网 发布:c语言 字符串统计函数 编辑:程序博客网 时间:2024/06/12 00:59
单个对象归档,对使用nscoding,nskeyed..理解更深刻了
列子在使用时 对 对象数组归档解档 要特别小心 iOS 下
对于自定义的对象,要实现归档操作必须注意,只有使用nsdata作为中间着转换
具体思路归档 customclass ->实现nscoding->NSKeyedArchiver.archivedDataWithRootObject一个实例到nsdata->归档这个nsdata
解档 过程相反NSKeyedUnarchiver.unarchive as nsdata->cutsom=NSKeyedUnarchiver.narchiveObjectWithData->终于拿到
class WLPlayer: NSObject,NSCoding {
struct WlPlayerkey {static let playernamekey="name"
static let playerimagekey="displayimg"
static let playerpath="/players.data"
}
var name:String!
var displayimg:String!
//得到沙盒路径存到缓存中
static func getfilepath()->String
{
let cachespath:String=NSSearchPathForDirectoriesInDomains( NSSearchPathDirectory.DocumentDirectory,NSSearchPathDomainMask.UserDomainMask, true)[0]
let path:String = cachespath.stringByAppendingString(WlPlayerkey.playerpath)
return path
}
//保存归档
static func saveplayertofile(newplayer:WLPlayer?) ->BooleanType
{
if (newplayer == nil)
{
return false
}
return NSKeyedArchiver.archiveRootObject(newplayer!, toFile:WLPlayer.getfilepath())
}
//得到all玩家信息
static func getallplayers() ->WLPlayer {
let data=NSKeyedUnarchiver.unarchiveObjectWithFile(WLPlayer.getfilepath()) as! WLPlayer
print( data.info())
return data
}
func info()->String
{
return "玩家"+self.name
}
required convenience init?(coder aDecoder: NSCoder) {
let aname=aDecoder.decodeObjectForKey(WlPlayerkey.playernamekey)
let imagepath=aDecoder.decodeObjectForKey(WlPlayerkey.playerimagekey)
self.init(name:aname as! String,displayimg:imagepath as! String)
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(self.name,forKey: WlPlayerkey.playernamekey)
aCoder.encodeObject(self.displayimg,forKey: WlPlayerkey.playerimagekey)
}
init?(name:String,displayimg:String) {
super.init()
if name.characters.count>0
{
self.name=name
self.displayimg=displayimg
}
else
{
return nil
}
}
//判断是否为一个玩家
func judgesameplayer(otherplayer:WLPlayer?)->Bool
{
if (otherplayer != nil)
{
if otherplayer!.name==self.name
{
return true
}
return false
}
return false
}
}
//多个对象的存储使用解档归档 , 轻量级 存储数据(的对象必须实现nscoding 两个方法,实际上才能 把 你的对象转成nsdata 类型的)
let newp1=Person.init(name: "王雨豪", age: 13)
let newp2=Person.init(name: "王豪", age: 13)
let newp3=Person.init(name: "雨豪", age: 13)
let newp4=Person.init(name: "王雨", age: 14)
let newp5=Person.init(name: "王", age: 16)
let newp6=Person.init(name: "妄图图", age: 13)
let allpersons=[newp1,newp2,newp3,newp4,newp5,newp6]
allperson.addObject(newp1!)
allperson.addObject(newp2!)
allperson.addObject(newp3!)
allperson.addObject(newp4!)
allperson.addObject(newp5!)
allperson.addObject(newp6!)
print(getfinalpath())
// let data=NSKeyedArchiver.archivedDataWithRootObject(newp6!)
//
//
// NSUserDefaults.standardUserDefaults().setObject(data, forKey: "new6")
//
// let getdata=NSUserDefaults.standardUserDefaults().objectForKey("new6") as! NSData
//
//
// let getnewperson=NSKeyedUnarchiver.unarchiveObjectWithData(getdata)
// as! Person
//
// print(getnewperson.name)
let datas=NSKeyedArchiver.archivedDataWithRootObject(allperson)
NSKeyedArchiver.archiveRootObject(datas, toFile: getfinalpath())
let getdatas=NSKeyedUnarchiver.unarchiveObjectWithFile(getfinalpath()) as! NSData
let somearry=NSKeyedUnarchiver.unarchiveObjectWithData(getdatas) as! NSMutableArray
var getpersons:[Person]?=[Person]()
for ids in somearry
{
if ids is Person
{
let a = ids as! Person
getpersons?.append(a)
print(a.name)
}
}
0 0
- ios swift 归档解档遇到的坑 3-30
- iOS swift-归档与解档
- swift归档解档
- Swift-归档解归档
- swift ios开发遇到的坑
- swift实现归档解档
- Swift 解档和归档
- swift 归档解档操作
- iOS解档归档
- iOS 解档归档
- ios-归档解档
- iOS的归档与解档
- IOS 对象的归档与解档
- iOS对象的归档与解档
- ios 归档解归档
- swift 本地归档、解档储存
- ios解档归档2
- ios自定义归档解档
- USB Mass Storage大容量存储的基本知识
- UINavigationController ( 导航控制器 )
- CF_5B_CenterAlignment
- [Unity官方文档翻译]Importing Assets 如何向unity导入资源
- BZOJ 1086([SCOI2005]王室联邦-树的划分)
- ios swift 归档解档遇到的坑 3-30
- ubuntu 15.04 通过3306端口远程连接mysql
- C++组合应用之strtok字符串分割、数组平分算法、动态数组函数传参
- android手机安全性测试手段
- PCL系列——从深度图像(RangeImage)中提取NARF关键点
- 【poj 1159】 Palindrome DP(类最长公共子序列)+滚动数组
- virutalbox 无线网卡桥接
- linux爱好者博客
- 关于安卓异步加载Asynctask的学习笔记