1. User Defaults
1.1 功能:可用作保存程序的用户界面的习惯设置等,相当于windows平台下的ini文件
1.2 基本用法:
step1 : 注册key并附初值
//返回默认的UserDefaults对象
[NSUserDefaults standardUserDefaults]
//该方法完成注册的功能
exp.
//注册key1,并附初值为NO
NSMutableDictionary *defaultValues = [NSMutableDictionary dictionary];
[defaultValues setObject:[NSNumber numberWithBool:NO] forKey:@"key1"];
[[NSUserDefaults standardUserDefaults] registerDefaults: defaultValues];
step2:修改key值和获取key值
//修改方法
- (void)setObject:(id)
value forKey:(
NSString *)
defaultName
//获取方法
- (id)objectForKey:(
NSString *)
defaultName
step3: 删除key
//删除用户设置的key
- (void)removeObjectForKey:(
NSString *)
defaultName
1.3 注意事项:
建立key的操作通常应该放在程序启动时,还应该判断key是否已经存在,所以这里建议在registerDefaults时,传入的dictionary应该包含类对象类型(如NSNumber*,而非BOOL),目的在于可以通过这样的方式判断key是否已经建立:
if([[NSUserDefaults standardUserDefaults] objectForKey:@"key1"] == nil)
{
NSMutableDictionary *defaultValues = [NSMutableDictionary dictionary];
[defaultValues setObject:[NSNumber numberWithBool:NO] forKey:@"key1"];
[[NSUserDefaults standardUserDefaults] registerDefaults: defaultValues];
}
2. window窗口和splitview窗口的resize问题
2.1 窗口大小变化前,绝大多数会发送delegate消息(windowWillResize:toSize:),但并非所有:比如程序启动时,以及toolbar显示和缩进隐藏切换时,应当注意对这些情况的处理。
2.2 splitview 如果设置autoresize,那么spliteview中的个部分会按当前比例放大缩小
//该方法可以设置分割条的位置
- (void)setPosition:(CGFloat)position ofDividerAtIndex:(NSInteger)dividerIndex
2.3 在处理多子窗口resize等问题时,在interfacebuilding中应注意窗口间的包含管理,可以使用tool->select parent 查看父窗口
3. NSPersistentStoreCoordinator,NSManagedObjectContext 和 NSManagedObjectModel
3.1 NSPersistentStoreCoordinator 代表存储器对象,类型可以是xml,也可以是sqlite等等,根据情况选择使用,其中xml效率较低
参数一即为存储类型:
NSXMLStoreType对应xml
NSSQLiteStoreType对应sqlite
3.2 NSManagedObjectModel 代表所用实体和他们的属性构建起的模型,NSPersistentStoreCoordinator 初始化时需要使用NSManagedObjectModel 对象
3.3 NSManagedObjectContext 代表运行时Model的数据内容,和controller进行数据绑定后,可以使用save方法对controller中的数据进行保存,程序运行时能自动读取以前存储过的数据。
//保存数据
- (IBAction) saveAction:(id)sender {
NSError *error = nil;
if (![[self managedObjectContext] save:&error]) {
[[NSApplication sharedApplication] presentError:error];
}
}