Как мне создать свой собственный магазин путем создания подклассов IASKAbstractSettingsStore? - PullRequest
1 голос
/ 09 апреля 2011

Во-первых, InAppSettingsKit - это то, что я искал.Как только я разберусь с некоторыми вещами, это сэкономит мне кучу времени.

Мой вопрос: как мне создать свой собственный магазин, создав подкласс IASKAbstractSettingsStore? home IASK заявляет:

Поведение IASK по умолчанию заключается в сохранении настроек в [NSUserDefaults standardUserDefaults].Однако это поведение можно изменить, установив свойство settingsStore в IASKAppSettingsViewController.

и

Самый простой способ создать собственное хранилище - создать подклассIASKAbstractSettingsStore.

Я потратил много времени на прочесывание кода, и мне кажется, я понимаю его основную структуру.Однако я не могу понять, как и что , чтобы установить для свойства settingsStore значение.

Я могусм. хранилище параметров, определенное и реализованное в IASKAppSettingsViewController:

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

изатем изменил свойство settingsStore IASKAppSettingsViewController для размещения и инициализации моего нового класса 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 Ответ

2 голосов
/ 10 апреля 2011

Нашел ответ.

Мой вопрос показывает мою неопытность в отношении объектно-ориентированных языков в целом и концепции инкапсуляции и фреймворков в частности.Никаких изменений не нужно было вносить в код инфраструктуры 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];
...