2011-04-08 2 views
1

Прежде всего, InAppSettingsKit - это то, что я искал. Как только я выясню некоторые вещи, это сэкономит мне массу времени.Как создать собственный магазин путем подкласса IASKAbstractSettingsStore?

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

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

и

Самый простой способ создать свой собственный магазин, чтобы создать подкласс IASKAbstractSettingsStore.

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

я могу увидеть 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) 

Что я делаю неправильно? В дополнение к изменениям, необходимым для «rejigger» кода для использования IASKSettingsStoreFile (или подкласса IASKAbstractSettingsStore), я также не вижу, где установить путь к файлу, чтобы изменить местоположение сохранения настроек - или это делается за сцены. С нетерпением ждем, чтобы пройти эту кривую обучения и использовать это.

ответ

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]; 
+0

Отлично, что вы нашли решение по своему усмотрению. Возможно, нам нужно немного улучшить документацию или включить пример в пример приложения. –

+0

Спасибо, что поделились своим решением. Я боролся с методом initWithPath. Ваш пример заставил все работать. (Я создал расширение IASKSettingsStoreFile, так что пароли хранятся в родной цепочке ключей, а не plist для лучшей защиты.) – Billy

Смежные вопросы