来自:mjsws > 馆藏分类
配色: 字号:
数据存储小结
2018-10-10 | 阅:  转:  |  分享 
  
数据存储小结首选项设置存储NSUserDefaults以及通过它控制的SettingBundle?NSUserDefaults用来保存
一些设置,他会自动写到何时的位置。NSUbiquitousKeyValueStore多平台同步设置,限制是大小64k,开启ent
itlement,唯一AppleID(还要考虑无法连接到iCloud网络时的情形)文件存储一.目录描述Home>/AppName.appbundle目录,包括程序本身。往里面些东西会导致签名改变和重启程序。初始同步后iTunes不
备份此目录。/Documents/存储用户文档和程序数据。通过文件共享可以使其可见。iTun
es备份之。/Documents/Inbox其他程序要求本程序打开的文档。可读删,不可增加修
改。要改变可以先移出来。iTunes备份之。/Library/非用户数据文件存储的根目录。用
其中标准或自定义的文件夹备份不被用户可见的数据。不应用这个目录存储用户数据。iTunes备份之。~Library/Applica
tionSupport/为用户创建管理的资源和数据文件。用这个目录存储程序状态信息,下载的文件甚至用户创
建但同意你管理的数据。自动保存文件。~/Library/Caches/用来存储缓存文件或者程序可以简单重
建的文件的目录。天地棋牌http://www.dadiqipaigw.cn/tmp/临时文
件目录,可能被系统删除,不应期望始终存在。不被iTunes备份。得到目录地址URLsForDirectory:inDomains:
method返回NSURL形式的目录地址NSSearchPathForDirectoriesInDomains返回字符串形式
的目录地址NSHomeDirectory返回程序根目录NSTemporaryDirectory返回临时文件目录相关变量定义NS
SearchPathDirectoryenum{NSApplicationDirectory=1,//Supporteda
pplications(/Applications)NSDemoApplicationDirectory,//Unsupport
edapplicationsanddemonstrationversionsNSDeveloperApplicationD
irectory,//Developerapplications(/Developer/Applications)NSAdmi
nApplicationDirectory,//Systemandnetworkadministrationapplica
tionsNSLibraryDirectory,//Varioususer-visibledocumentation,sup
port,andconfigurationfiles(/Library)NSDeveloperDirectory,//De
veloperresources(/Developer)NSUserDirectory,//Userhomedirecto
ries(/Users)NSDocumentationDirectory,//NSDocumentDirectory,//NSC
oreServiceDirectory,//Locationofcoreservices(System/Library/C
oreServices)NSAutosavedInformationDirectory=11,//Locationofus
er’sautosaveddocumentsLibrary/AutosaveInformationNSDesktopDir
ectory=12,//NSCachesDirectory=13,//Locationofdiscardableca
chefiles(Library/Caches)NSApplicationSupportDirectory=14,//Lo
cationofapplicationsupportfiles(Library/ApplicationSupport)
NSDownloadsDirectory=15,//NSInputMethodsDirectory=16,//NSMovi
esDirectory=17,//NSMusicDirectory=18,//NSPicturesDirectory=
19,//NSPrinterDescriptionDirectory=20,//NSSharedPublicDirectory
=21,//NSPreferencePanesDirectory=22,//NSItemReplacementDirect
ory=99,//NSAllApplicationsDirectory=100,//NSAllLibrariesDirec
tory=101//};typedefNSUIntegerNSSearchPathDirectory;enum{NSUs
erDomainMask=1,//用户主目录中NSLocalDomainMask=2,//当前机器中NSNetworkDo
mainMask=4,//网络中可见的主机NSSystemDomainMask=8,//系统目录,不可修改(/System
)NSAllDomainsMask=0x0ffff,//全部};typedefNSUIntegerNSSearchPath
DomainMask;二.存储方式(一).属性列表(plist)array,dictionary,data,string,NSNu
mber,NSDate等ns对象直接写入plist文件中保存.(二).归档文件实现NSCoding协议(NSCopy也要实现?没
实现也成功了。。)编解码类说明NSKeyedArchiver创建-(id)initForWritingWithMutableDa
ta:(NSMutableData)data//归档数据写到data中638棋牌http://www.rodlg.c
om归档数据+(NSData)archivedDataWithRootObject:(id)rootObject//归档
到data中+(BOOL)archiveRootObject:(id)rootObjecttoFile:(NSString
)path//归档到文件中-(void)finishEncoding//调用后不能继续归档数据,归档结束必须调用(公共方
法归档的不用理这个了)–outputFormat//data编码方式,xml还是二进制–setOutputFormat:编码数
据–encodeBool:forKey:–encodeBytes:length:forKey:–encodeConditiona
lObject:forKey:–encodeDouble:forKey:–encodeFloat:forKey:–encodeIn
t:forKey:–encodeInt32:forKey:–encodeInt64:forKey:–encodeObject:fo
rKey:代理委托–delegate–setDelegate:–archiver:didEncodeObject:–archive
rDidFinish:–archiver:willEncodeObject:–archiverWillFinish:–archiv
er:willReplaceObject:withObject:类和类名+setClassName:forClass:+cla
ssNameForClass:–setClassName:forClass:–classNameForClass:异常extern
NSStringNSInvalidArchiveOperationException;NSKeyedUnarchiver创建
–initForReadingWithData:取消归档+(id)unarchiveObjectWithData:(NSData
)data//从data中得到实现归档的对象+(id)unarchiveObjectWithFile:(NSString
)path//从文件中得到解码数据-(BOOL)containsValueForKey:(NSString)key
//是否包含给定的key编码对象–decodeBoolForKey:–decodeBytesForKey:returnedLen
gth:–decodeDoubleForKey:–decodeFloatForKey:–decodeIntForKey:–deco
deInt32ForKey:–decodeInt64ForKey:–decodeObjectForKey:-(void)fini
shDecoding//通知委托解码结束,调用后不能再继续解码代理委托–delegate–setDelegate:–unarc
hiver:cannotDecodeObjectOfClassName:originalClasses:–unarchiver:d
idDecodeObject:–unarchiver:willReplaceObject:withObject:Finishing
Decoding–unarchiverDidFinish:–unarchiverWillFinish:类名+setClass:
forClassName:+classForClassName:–setClass:forClassName:–classFor
ClassName:异常NSStringNSInvalidUnarchiveOperationException;?(三).C
oreDataxcdatamodeld文件中Entity的三种属性:Attributes:对应的Obj-c类的接口变量.Rela
tionships:Entity之间的关系,to-one,orto-many.Fetchedproperties:对上面R
elationship的过滤?参考参考1对应文件存储形式COREDATA_EXTERNNSStringconstNSSQ
LiteStoreTypeNS_AVAILABLE(10_4,3_0);//SQLite形式存储COREDATA_EXTER
NNSStringconstNSXMLStoreTypeNS_AVAILABLE(10_4,NA);//ios不可
用COREDATA_EXTERNNSStringconstNSBinaryStoreTypeNS_AVAILABLE(
10_4,3_0);//二进制形式存储COREDATA_EXTERNNSStringconstNSInMemoryS
toreTypeNS_AVAILABLE(10_4,3_0);//内存中基本使用过程(括号中参考sql术语)NSManage
dObjectModel对象获取工程中xcdatamodeld文件设置的模版(就是你的数据库有哪些表,表中有哪些字段的一种说明)
NSPersistentStoreCoordinator对象根据上面的模版生成或对应的一个文件(数据库文件,具体的数据文件)NS
ManagedObjectContext对象上面文件的操作的空间,增删改查都通过这里进行NSEntityDescription对
象得到上面context中的一个表NSFetchRequest对象对上面表的一些具体操作,增删改查-(NSArray)e
xecuteFetchRequest:(NSFetchRequest)requesterror:(NSError)er
ror;使用这个方法执行上面的request如果增删改了context,记得保存。结束过程示例:NSManagedObjectC
ontextmanagedObjectContext=nil;//得到模版NSURLmodelURL=[[NSB
undlemainBundle]URLForResource:@"YOUR_XCDATAMODELD_FILE_NAME"w
ithExtension:@"momd"];NSManagedObjectModelmanagedObjectModel=
[[NSManagedObjectModelalloc]initWithContentsOfURL:modelURL];//
具体文件,DOCUMENT_DICRECTORY应该是nsurl的..NSURLstoreURL=[@"DOCUMENT_
DICRECTORY"URLByAppendingPathComponent:@"SQLITE.sqlite"];NSError
error=nil;NSPersistentStoreCoordinatorcoordinator=[[NSPer
sistentStoreCoordinatoralloc]initWithManagedObjectModel:managed
ObjectModel];//使用SQLite存储if(![coordinatoraddPersistentStoreWit
hType:NSSQLiteStoreTypeconfiguration:nilURL:storeURLoptions:ni
lerror:&error]){?//出错}else{//得到操作空间managedObjectContext=[[N
SManagedObjectContextalloc]init];[managedObjectContextsetPersi
stentStoreCoordinator:coordinator];}?//得到具体的表NSEntityDescription
entityDescription=[NSEntityDescriptionentityForName:@"ONE_ENT
ITY_NAME"inManagedObjectContext:managedObjectContext];//操作语句NSFe
tchRequestrequest=[[NSFetchRequestalloc]init];[requestsetE
ntity:entityDescription];//操作语句的条件NSPredicatepred=[NSPredica
tepredicateWithFormat:@"PREDICATE_SECTION"];[requestsetPredicat
e:pred];?NSManagedObjectmanageObject=nil;//执行操作,得到多条具体数据NSAr
rayobjects=[managedObjectContextexecuteFetchRequest:request
error:&error];?if(objects==nil){//出错?}if([objectscount]>
0)//多条,取第一条manageObject=[objectsobjectAtIndex:0];else//没有相应的
,就创建manageObject=[NSEntityDescriptioninsertNewObjectForEntityFo
rName:@"TABLE_NAME"inManagedObjectContext:managedObjectContext];/
/改变她的一个字段的值[manageObjectsetValue:@"VALUE"forKey:@"ONE_FIELD_NA
ME_OF_THE_TABLE"];?[requestrelease];//保存,结束[managedObjectContex
tsave:&error];?(四).SQLite引入SQLite库,加入头文件,使用CAPI操作.繁琐的地方在于只能存储c数
据格式,需要来回转换.易火棋牌http://www.482223.com过程示例://声明数据库sqlite3datab
ase;//打开if(sqlite3_open("数据库文件路径",&database)!=SQLITE_OK){sq
lite3_close(database);//出错}?charerrorMsg;//执行无返回语句if(sqlite3_exec(database,"增删改创语句",NULL,NULL,&errorMsg)!=SQLITE_OK){sqlite3_close(database);//出错}sqlite3_stmtstatement;//执行查询语句if(sqlite3_prepare_v2(database,"查询语句",-1,&statement,nil)==SQLITE_OK){//遍历结果while(sqlite3_step(statement)==SQLITE_ROW){introw=sqlite3_column_int(statement,0);//第一列数据charrowData=(char)sqlite3_column_text(statement,1);}//结束遍历sqlite3_finalize(statement);}//关闭数据库sqlite3_close(database);
献花(0)
+1
(本文系mjsws首藏)