首先,InAppSettingsKit就是我想要的。一旦我找到了一些东西,它将为我节省大量时间。
我的问题是:如何通过继承IASKAbstractSettingsStore创建自己的商店? home of IASK州:
IASK的默认行为是将设置存储在[NSUserDefaults standardUserDefaults]中。但是,可以通过在IASKAppSettingsViewController上设置settingsStore属性来更改此行为。
和
创建自己商店的最简单方法是创建IASKAbstractSettingsStore的子类。
我花了很多时间梳理代码,我想我理解它的基本结构。但是,我无法弄清 如何 和 来设置settingsStore属性。
我可以看到在IASKAppSettingsViewController中定义和实现的settingsStore:
id<IASKSettingsStore> _settingsStore;
和
- (id<IASKSettingsStore>)settingsStore {
if (!_settingsStore) {
_settingsStore = [[IASKSettingsStoreUserDefaults alloc] init];
}
return _settingsStore;
}
我尝试了继承IASKAbstractSettingsStore:
#import <Foundation/Foundation.h>
#import "IASKSettingsStore.h"
@interface IASKSettingsStoreMeals : IASKAbstractSettingsStore {
NSString * _filePath;
NSMutableDictionary * _dict;
}
- (id)initWithPath:(NSString*)path;
@end
然后修改了IASKAppSettingsViewController的settingsStore属性来分配和初始化我的新类IASKSettingsStoreMeals而不是IASKSettingsStoreUserDefaults - 我可以看到更改属性的唯一方法:
- (id<IASKSettingsStore>)settingsStore {
if (!_settingsStore) {
_settingsStore = [[IASKSettingsStoreMeals alloc] init];
}
return _settingsStore;
}
当我构建并运行时,当我尝试第一个控件(切换开关)时,我收到以下消息,所有其他字段都没有保存:
attempt to insert nil value at objects[0] (key: toggleSwitch)
我做错了什么?除了“重新调整”代码以使用IASKSettingsStoreFile(或子类IASKAbstractSettingsStore)所需的更改之外,我还无法看到设置文件路径的位置更改设置保存位置的位置 - 或者是在场景。期待通过这个学习曲线并使用它。
答案 0 :(得分:2)
找到答案。
我的问题揭示了我对面向对象语言的整体缺乏经验,特别是封装和框架的概念。不需要对IASK框架代码进行任何更改,所有代码都添加到我的根视图控制器上。
我创建了另一个IASKAppSettingsViewController实例,并添加了以下代码来更改plist位置:
// the path to write file
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *settingsFile = [documentsDirectory stringByAppendingPathComponent:@"mySettings"];
IASKSettingsStoreFile *mySettingsBundle = [[IASKSettingsStoreFile alloc] initWithPath:settingsFile];
self.appSettingsViewController.settingsStore = mySettingsBundle;
UINavigationController *aNavController = [[UINavigationController alloc] initWithRootViewController:self.appSettingsViewController];
[mySettingsBundle release];
self.appSettingsViewController.settingsStore = mySettingsBundle;
//[viewController setShowCreditsFooter:NO]; // Uncomment to not display InAppSettingsKit credits for creators.
// But we encourage you not to uncomment. Thank you!
self.appSettingsViewController.showDoneButton = YES;
[self presentModalViewController:aNavController animated:YES];
[aNavController release];