0

まずは状況説明から。私は webservice と webApplication で動作する IOS アプリを作成しています。次の例を見てください。

会社 X があるとします。会社 X は Web アプリケーションであらゆる種類のフォームを作成できます (Callback フォーム、meetingRequest フォーム、vacationRequestForm など)。雇用主はアプリケーションを開いて、テーブルビューでこれらのフォームのすべてのタイトルを確認します。タイトルをクリックすると、次の画面に移動し、フォーム全体が表示され、入力を開始できます。

ここでの難点は、各企業が独自のフォームを作成できることです。したがって、X 社は Y 社とは異なる種類のフォームを持っている可能性があります。多くの調査の後、QuickDialog の素晴らしいライブラリを見つけました。ここで見つけることができます。それをチェックする価値は間違いなくあります!

問題 さて、問題です。もちろん、ユーザーがフォームに入力したら、データをサーバーに送り返す必要があります。そのために、コントローラー クラスと NSObject クラスを使用しています。理解する最善の方法は、ログインの例を見ることです。まずはログインのjsonです。

{
    "grouped": true,
    "title": "Login Form",
    "controllerName": "LoginController",
    "sections": [
        { "title":"login", "elements": [
                { "type":"QEntryElement", "title":"Login","placeholder":"Login or email", "bind":"textValue:login", "key":"login"},
                {  "type":"QEntryElement", "title":"Password", "placeholder":"Password",  "secureTextEntry":true, "bind":"textValue:password" }
            ]
        },
        { "elements":[
                { "type":"QButtonElement", "key":"button", "title":"Login", "controllerAction":"onLogin:"}
            ]
        }
    ]
}

2 つのフィールドにバインド オプションがあることがわかります。プロジェクトには NSObject クラス (loginInfo) が含まれています。このクラスでは、これらのフィールドは NSStrings として追加されます。

@interface LoginInfo : NSObject {
@private
    NSString *_password;
    NSString *_login;
} 
@property(strong) NSString *login;
@property(strong) NSString *password;
@end

次にコントローラークラスです。このコントローラ クラスでは、ボタンが押されたときに、テキスト フィールドからこの loginInfo クラスに値をフェッチすると言います。これは、次の方法で行われます。

- (void)onLogin:(QButtonElement *)buttonElement {

    [[[UIApplication sharedApplication] keyWindow] endEditing:YES];
    [self loading:YES];
    LoginInfo *info = [[LoginInfo alloc] init];
    [self.root fetchValueUsingBindingsIntoObject:info];
    [self performSelector:@selector(loginCompleted:) withObject:info afterDelay:2];
}
- (void)loginCompleted:(LoginInfo *)info {
    [self loading:NO];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Welcome" message:[NSString stringWithFormat: @"Hi %@, I hope you're loving QuickDialog! Here's your pass: %@", info.login, info.password] delegate:self cancelButtonTitle:@"YES!" otherButtonTitles:nil];
    [alert show];
}

さて、私はこれが多くの情報であることを知っています。しかし、私は自分の問題について十分な説明をしたいだけです。コントローラ クラスは私の問題ではないと思いますが、NSObject クラスは問題です。これをジェネリックにしたい。これは、json から取得したプロパティで埋められる必要があるためです。どうすればそれができるのかわかりません。

誰かが私を助けてくれることを願っています!さらに説明が必要な場合は、お気軽にお問い合わせください。

よろしくお願いいたします。

4

1 に答える 1

2

fetchValueUsingBindingIntoObjects:これは、KVC をサポートするほぼすべてのオブジェクトがそれを行うことを意味します。

NSMutableDictionary *dict = [NSMutableDictionary new];
[self.root fetchValueUsingBindingsIntoObject:dict];

このようにして、任意のフォームに関するデータを取得し、それを使用して Web に送り返すことができます。

于 2012-11-14T14:31:37.770 に答える