如何通过IASKAbstractSettingsStore的子类化创建自己的商店?

时间:2011-04-08 22:41:17

标签: objective-c cocoa-touch inappsettingskit inappsettings

首先,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)所需的更改之外,我还无法看到设置文件路径的位置更改设置保存位置的位置 - 或者是在场景。期待通过这个学习曲线并使用它。

1 个答案:

答案 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];