Mac 桌面应用软件开发经验小结

 
1. User Defaults
 
1.1 功能:可用作保存程序的用户界面的习惯设置等,相当于windows平台下的ini文件
 
1.2 基本用法:
step1 : 注册key并附初值
 
//返回默认的UserDefaults对象
[NSUserDefaults standardUserDefaults]
 
//该方法完成注册的功能
- (void)registerDefaults:(NSDictionary *)dictionary
 
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效率较低
 
- (NSPersistentStore *)addPersistentStoreWithType:(NSString *)storeType configuration:(NSString *)configuration URL:(NSURL *)storeURL options:(NSDictionary *)options error:(NSError **)error
 
参数一即为存储类型:
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];
    }
}