1

まず、InAppSettingsKitはまさに私が探していたものです。いくつかのことを理解したら、それは私にたくさんの時間を節約するでしょう。

私の質問は、IASKAbstractSettingsStoreをサブクラス化して独自のストアを作成するにはどうすればよいですか?IASKの本拠地は次のように述べています。

IASKのデフォルトの動作は、設定を[NSUserDefaultsstandardUserDefaults]に保存することです。ただし、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プロパティを変更して、IASKSettingsStoreUserDefaultsの代わりに新しいクラスIASKSettingsStoreMealsを割り当てて初期化します。これは、プロパティを変更するために確認できる唯一の方法です。

- (id<IASKSettingsStore>)settingsStore {
if (!_settingsStore) {
    _settingsStore = [[IASKSettingsStoreMeals alloc] init];
}
return _settingsStore;

}

ビルドして実行すると、最初のコントロール(トグルスイッチ)を試したときに次のメッセージが表示されますが、他のすべてのフィールドは保存されません。

attempt to insert nil value at objects[0] (key: toggleSwitch)

私は何が間違っているのですか?IASKSettingsStoreFile(またはサブクラス化されたIASKAbstractSettingsStore)を使用するためにコードを「再調整」するために必要な変更に加えて、ファイルパスを設定する場所がわかりません。また、設定が保存される場所を変更します。シーン。この学習曲線を乗り越え、これを使用することを楽しみにしています。

4

1 に答える 1

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];
于 2011-04-09T20:57:23.697 に答える