- 浏览: 584689 次
- 性别:
- 来自: 广州
-
文章分类
最新评论
-
JYY282:
[i][/i]
Ecshop与Shopex的比较 -
qq247890212:
我也遇见这问题了,真诡异。重新下载个猫换了就好了。 太浪费时间 ...
诡异:ClassNotFoundException: org.springframework.web.filter.CharacterEncoding
From:http://www.uplook.cn/index-Index-show-view17939.html
首选项设置存储
NSUserDefaults 以及通过它控制的SettingBundle NSUserDefaults 用来保存一些设置,他会自动写到何时的位置。
NSUbiquitousKeyValueStore 多平台同步设置,限制是大小64k,开启entitlement,唯一Apple ID(还要考虑无法连接到iCloud网络时的情形)
文件存储
一.目录描述
<Application_Home>/AppName.app bundle目录,包括程序本身。往里面些东西会导致签名改变和重启程序。初始同步后iTunes不备份此目录。
<Application_Home>/Documents/ 存储用户文档和程序数据。通过文件共享可以使其可见。iTunes备份之。
<Application_Home>/Documents/Inbox 其他程序要求本程序打开的文档。可读删,不可增加修改。要改变可以先移出来。iTunes备份之。
<Application_Home>/Library/ 非用户数据文件存储的根目录。用其中标准或自定义的文件夹备份不被用户可见的数据。不应用这个目录存储用户数据。iTunes备份之。
~Library/Application Support/<bundle_ID> 为用户创建管理的资源和数据文件。用这个目录存储程序状态信息,下载的文件甚至用户创建但同意你管理的数据。自动保存文件。
~/Library/Caches/<bundle_ID> 用来存储缓存文件或者程序可以简单重建的文件的目录。
<Application_Home>/tmp/ 临时文件目录,可能被系统删除,不应期望始终存在。不被iTunes备份。
得到目录地址
URLsForDirectory:inDomains: method 返回NSURL形式的目录地址
NSSearchPathForDirectoriesInDomains 返回字符串形式的目录地址
NSHomeDirectory 返回程序根目录
NSTemporaryDirectory 返回临时文件目录
相关变量定义
NSSearchPathDirectory enum { NSApplicationDirectory = 1,//Supported applications (/Applications) NSDemoApplicationDirectory,//Unsupported applications and demonstration versions NSDeveloperApplicationDirectory,//Developer applications (/Developer/Applications) NSAdminApplicationDirectory,//System and network administration applications NSLibraryDirectory,//Various user-visible documentation, support, and configuration files (/Library) NSDeveloperDirectory,//Developer resources (/Developer) NSUserDirectory,//User home directories (/Users) NSDocumentationDirectory,// NSDocumentDirectory,// NSCoreServiceDirectory,//Location of core services (System/Library/CoreServices) NSAutosavedInformationDirectory = 11,//Location of user’s autosaved documents Library/Autosave Information NSDesktopDirectory = 12,// NSCachesDirectory = 13,//Location of discardable cache files (Library/Caches) NSApplicationSupportDirectory = 14,//Location of application support files (Library/Application Support) NSDownloadsDirectory = 15,// NSInputMethodsDirectory = 16,// NSMoviesDirectory = 17,// NSMusicDirectory = 18,// NSPicturesDirectory = 19,// NSPrinterDescriptionDirectory = 20,// NSSharedPublicDirectory = 21,// NSPreferencePanesDirectory = 22,// NSItemReplacementDirectory = 99,// NSAllApplicationsDirectory = 100,// NSAllLibrariesDirectory = 101// }; typedef NSUInteger NSSearchPathDirectory;
enum { NSUserDomainMask = 1,//用户主目录中 NSLocalDomainMask = 2,//当前机器中 NSNetworkDomainMask = 4,//网络中可见的主机 NSSystemDomainMask = 8,//系统目录,不可修改(/System) NSAllDomainsMask = 0x0ffff,//全部 }; typedef NSUInteger NSSearchPathDomainMask;
二.存储方式
(一).属性列表(plist)
array,dictionary,data,string,NSNumber,NSDate 等ns对象直接写入plist文件中保存.
(二).归档文件
实现NSCoding协议(NSCopy也要实现?没实现也成功了。。)
编解码类说明
NSKeyedArchiver
创建
- (id)initForWritingWithMutableData:(NSMutableData *)data // 归档数据写到data中
归档数据
+ (NSData *)archivedDataWithRootObject:(id)rootObject // 归档到data中
+ (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path // 归档到文件中
- (void)finishEncoding // 调用后不能继续归档数据,归档结束必须调用(公共方法归档的不用理这个了)
– outputFormat // data编码方式,xml还是二进制
– setOutputFormat:
编码数据
– encodeBool:forKey:
– encodeBytes:length:forKey:
– encodeConditionalObject:forKey:
– encodeDouble:forKey:
– encodeFloat:forKey:
– encodeInt:forKey:
– encodeInt32:forKey:
– encodeInt64:forKey:
– encodeObject:forKey:
代理委托
– delegate
– setDelegate:
– archiver:didEncodeObject: – archiverDidFinish: – archiver:willEncodeObject: – archiverWillFinish: – archiver:willReplaceObject:withObject:
类和类名
+ setClassName:forClass:
+ classNameForClass:
– setClassName:forClass:
– classNameForClass:
异常
extern NSString *NSInvalidArchiveOperationException;
NSKeyedUnarchiver
创建
– initForReadingWithData:
取消归档
+ (id)unarchiveObjectWithData:(NSData *)data // 从data中得到实现归档的对象
+ (id)unarchiveObjectWithFile:(NSString *)path // 从文件中得到
解码数据
- (BOOL)containsValueForKey:(NSString *)key // 是否包含给定的key编码对象
– decodeBoolForKey:
– decodeBytesForKey:returnedLength:
– decodeDoubleForKey:
– decodeFloatForKey:
– decodeIntForKey:
– decodeInt32ForKey:
– decodeInt64ForKey:
– decodeObjectForKey:
- (void)finishDecoding // 通知委托解码结束,调用后不能再继续解码
代理委托
– delegate
– setDelegate:
– unarchiver:cannotDecodeObjectOfClassName:originalClasses: – unarchiver:didDecodeObject: – unarchiver:willReplaceObject:withObject: Finishing Decoding – unarchiverDidFinish: – unarchiverWillFinish:
类名
+ setClass:forClassName:
+ classForClassName:
– setClass:forClassName:
– classForClassName:
异常
NSString *NSInvalidUnarchiveOperationException;
(三).CoreData
xcdatamodeld文件中Entity的三种属性:
Attributes: 对应的Obj-c类的接口变量.
Relationships: Entity之间的关系,to-one,or to-many.
Fetched properties: 对上面Relationship的过滤?参考参考1
对应文件存储形式
COREDATA_EXTERN NSString * const NSSQLiteStoreType NS_AVAILABLE(10_4, 3_0);// SQLite形式存储
COREDATA_EXTERN NSString * const NSXMLStoreType NS_AVAILABLE(10_4, NA);// ios不可用
COREDATA_EXTERN NSString * const NSBinaryStoreType NS_AVAILABLE(10_4, 3_0);// 二进制形式存储
COREDATA_EXTERN NSString * const NSInMemoryStoreType NS_AVAILABLE(10_4, 3_0);// 内存中
基本使用过程(括号中参考sql术语)
NSManagedObjectModel对象 获取工程中xcdatamodeld文件设置的模版(就是你的数据库有哪些表,表中有哪些字段的一种说明)
NSPersistentStoreCoordinator对象 根据上面的模版生成或对应的一个文件(数据库文件,具体的数据文件)
NSManagedObjectContext对象 上面文件的操作的空间,增删改查都通过这里进行
NSEntityDescription对象 得到上面context中的一个表
NSFetchRequest对象 对上面表的一些具体操作,增删改查
- (NSArray *)executeFetchRequest:(NSFetchRequest *)request error:(NSError **)error; 使用这个方法执行上面的request
如果增删改了context,记得保存。结束
过程示例:
NSManagedObjectContext *managedObjectContext = nil; // 得到模版 NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"YOUR_XCDATAMODELD_FILE_NAME" withExtension:@"momd"]; NSManagedObjectModel* managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; // 具体文件,DOCUMENT_DICRECTORY应该是nsurl的.. NSURL *storeURL = [@"DOCUMENT_DICRECTORY" URLByAppendingPathComponent:@"SQLITE.sqlite"]; NSError *error = nil; NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel]; // 使用SQLite存储 if (![coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) { // 出错 } else { // 得到操作空间 managedObjectContext = [[NSManagedObjectContext alloc] init]; [managedObjectContext setPersistentStoreCoordinator:coordinator]; } // 得到具体的表 NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"ONE_ENTITY_NAME" inManagedObjectContext:managedObjectContext]; // 操作语句 NSFetchRequest *request = [[NSFetchRequest alloc] init]; [request setEntity:entityDescription]; // 操作语句的条件 NSPredicate *pred = [NSPredicate predicateWithFormat:@"PREDICATE_SECTION"]; [request setPredicate:pred]; NSManagedObject *manageObject = nil; // 执行操作,得到多条具体数据 NSArray *objects = [managedObjectContext executeFetchRequest:request error:&error]; if (objects == nil) { // 出错 } if ([objects count] > 0) // 多条,取第一条 manageObject = [objects objectAtIndex:0]; else // 没有相应的,就创建 manageObject = [NSEntityDescription insertNewObjectForEntityForName:@"TABLE_NAME" inManagedObjectContext:managedObjectContext]; // 改变她的一个字段的值 [manageObject setValue:@"VALUE" forKey:@"ONE_FIELD_NAME_OF_THE_TABLE"]; [request release]; // 保存,结束 [managedObjectContext save:&error];
(四).SQLite
引入SQLite库,加入头文件,使用C API操作.繁琐的地方在于只能存储c数据格式,需要来回转换.
过程示例:
// 声明数据库 sqlite3 *database; // 打开 if (sqlite3_open("数据库文件路径", &database) != SQLITE_OK) { sqlite3_close(database); // 出错 } char *errorMsg; // 执行无返回语句 if (sqlite3_exec (database, "增删改创语句",NULL, NULL, &errorMsg) != SQLITE_OK) { sqlite3_close(database); // 出错 } sqlite3_stmt *statement; // 执行查询语句 if (sqlite3_prepare_v2(database, "查询语句",-1, &statement, nil) == SQLITE_OK) { // 遍历结果 while (sqlite3_step(statement) == SQLITE_ROW) { int row = sqlite3_column_int(statement, 0); // 第一列数据 char *rowData = (char *)sqlite3_column_text(statement, 1); } // 结束遍历 sqlite3_finalize(statement); } // 关闭数据库 sqlite3_close(database);
发表评论
-
Objective-C 与 C++ 的异同
2013-04-02 12:03 1408http://www.cnblogs.com/y041039 ... -
Cocos2D-X是全球知名的开源跨平台手机游戏引擎
2013-01-22 10:05 2765http://www.oschina.net/p/cocos ... -
iOS Keyboard 键盘高度变化 自适应
2013-01-15 15:43 3261[[NSNotificationCenter default ... -
iOS使用自定义字体
2012-11-27 12:11 12161From: http://blog.csdn.net/csy1 ... -
4 款类似 Facebook/Path 切换效果的 iOS 组件
2012-11-27 12:03 2208From: http://blog.csdn.net/lia ... -
Path 2.0的UI界面设计详细介绍
2012-11-27 11:56 1481如Path的创始人Dave Morin ... -
史上最全的App Store邮箱列表
2012-11-27 11:51 1280From: http://roybaby.blog.51cto ... -
iOS从info.plist 获取项目的名称及版本号
2012-11-16 10:54 1687From: http://blog.sina.com.cn/s ... -
MapKit annotation drag and drop with callout info update
2012-10-13 10:38 2425http://hollowout.blogspot ... -
NSArray 或NSDictionary 调用writeToFile方法失败原因
2012-08-31 10:03 4515NSArray 或NSDictionary 调用writeTo ... -
如何让IOS应用从容地崩溃
2012-08-30 15:25 1628From: http://www.cocoachina.com ... -
iOS中判断设备系统版本
2012-08-29 17:17 31724在iOS开发中,经常要考虑系统的向下兼容,如果使用 ... -
iOS 汉字转拼音
2012-08-21 16:42 1481From: http://www.cnblogs.com/v2 ... -
iOS模拟器截图工具
2012-08-17 16:35 1678From: http://magicalboy.com/ios ... -
XCode下的iOS单元测试
2012-08-10 17:47 1182From: http://mobile.51cto.com/ ... -
AFNetworking
2012-08-08 10:54 4659AFNetworking on github: https:/ ... -
Wrapping Conventions
2012-08-01 15:54 865Wrapping Conventions ... -
Core Animation如何使显式动画结束时的值直接作用Layer
2012-08-01 14:51 3803(1)使用隐式动画会直接改变layer的属性值,如: ima ... -
How To Debug Memory Leaks with XCode and Instruments Tutoria
2012-07-31 16:30 1068From: http://www.raywenderlich. ... -
Using Properties in Objective-C Tutorial
2012-07-31 16:27 943From: http://www.raywenderlich. ...
相关推荐
要将图片存储到应用的Documents目录,可以使用`NSSearchPathForDirectoriesInDomains`获取Documents目录的路径,然后拼接图片的文件名,创建一个`NSData`对象,用`UIImagePNGRepresentation`或`...
要将图片存储到iPhone本地的Documents目录,首先获取Documents目录路径,然后使用`UIImagePNGRepresentation`或`UIImageJPEGRepresentation`将图片转换为数据,最后使用`writeToFile:atomically:`方法将数据写入...
其次,将图片存储到iPhone本地的Documents目录下,可以使用`NSSearchPathForDirectoriesInDomains`获取Documents目录的路径,然后通过`NSData`的`writeToFile:atomically:`方法将图片数据写入文件系统。这里需要注意...
在iOS应用开发中,XML(eXtensible Markup Language)是一种常见的数据交换格式,用于存储结构化数据。本文将深入探讨iPhone开发中的XML解析流程,帮助开发者更好地理解和使用这一技术。 首先,我们要了解XML的基本...
在iOS开发中,XML(eXtensible Markup Language)是一种常用的数据交换格式,它用于存储结构化数据。本文将深入探讨如何使用GDataXMLParser库在iPhone应用中解析XML文件。GDataXMLParser是Google提供的一款强大的XML...
13.3 小结 13.4 问与答 13.5 作业 第14章 存储应用程序首选项 第15章 使用表视图显示和导航数据 第16章 读写数据 第17章 创建可旋转及调整大小的用户界面 第18章 扩展触摸界面 第19章 使用加速计输入检测移动 第20章...
1.14 小结.....29 第2章视图......30 2.1 UIView 和UIWindow...30 2.1.1 层次结构.....30 2.1.2 几何特征.....31 2.1.3 手势.....34 2.2 秘诀:添加递进式子视图.....34 2.3 秘诀:拖动视图.....36 2.3.1 UITouch......
1.14 小结.....29 第2章视图......30 2.1 UIView 和UIWindow...30 2.1.1 层次结构.....30 2.1.2 几何特征.....31 2.1.3 手势.....34 2.2 秘诀:添加递进式子视图.....34 2.3 秘诀:拖动视图.....36 2.3.1 UITouch......
1.14 小结.....29 第2章视图......30 2.1 UIView 和UIWindow...30 2.1.1 层次结构.....30 2.1.2 几何特征.....31 2.1.3 手势.....34 2.2 秘诀:添加递进式子视图.....34 2.3 秘诀:拖动视图.....36 2.3.1 UITouch......
**1.14 小结** 本章介绍了iPhone SDK的基础知识,包括项目创建、组件结构、编程范型等内容,为后续章节的学习打下了坚实的基础。 --- #### 第2章:视图 **2.1 UIView 和 UIWindow** - **层次结构**:视图之间...
- **小结**: - 总结前几节学习的重点,回顾创建iOS应用的基本步骤。 - **构建应用程序**: - 将前面学到的知识综合运用,构建一个完整的应用程序。 - 包括设计用户界面、定义交互逻辑、实现具体功能等环节。 #...
#### 小结 斯坦福大学的iOS开发课程是一门全面且深入的课程,不仅教授如何构建出色的iOS应用,还强调了面向对象编程的重要性及其在iOS开发中的应用。通过学习本课程,学生将能够掌握iOS开发的核心技术和设计理念,...
2.4 本章小结 15 第三章 跨域交互缓存处理设计 17 3.1 跨域交互缓存处理需求 17 3.1.1 缓存技术WebStorage 17 3.1.2 跨域交互缓存处理需求 17 3.1.3 页面回退管理需求 17 3.2 缓存处理机制 18 3.2.1 跨域缓存处理 18...
8. **iOS内IPC(进程间通信)方法小结.doc**:iOS中的进程间通信(IPC)允许不同应用之间共享数据或服务,可能涵盖了如NSMessagePort、CFMessagePort、NSDistributedNotificationCenter等技术。 9. **OBJECTIVE-C字符...
### 小结 在实际的开发和运维工作中,文件在Docker容器和宿主机之间的传输是很常见的需求。通过`docker cp`命令可以在已运行的容器和宿主机之间直接传输文件,而通过Docker Volume则可以实现更加复杂的数据共享和...