quickDialog表单的泛型类

时间:2012-11-14 10:46:00

标签: objective-c ios json generic-programming quickdialog

首先让我先解释一下情况。我正在制作一个使用webservice和webApplication的IOS应用程序。以下面的例子为例。

假设我们有公司X.公司X可以使用webapplication制作各种形式(回调表单,meetingRequest表单,vacationRequestForm,...)然后,雇主将打开他们的应用程序并查看这些表单的所有标题。实现代码如下。当他们点击标题时,他们会转到下一个屏幕并看到整个表格并开始填写。

这里的困难在于每家公司都可以创建自己的表格。所以公司X可能有比Y公司更多的形式。经过大量的研究,我找到了惊人的QuickDialog库。您可以在here上找到它。绝对值得一试!

问题 好的,现在问题。当用户填写表格时,应将数据发送回服务器。为此,我正在使用控制器类和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:"}
            ]
        }
    ]
}

您可以看到这两个字段都有绑定选项。该项目包含一个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返回的属性。我不知道怎么做。

我希望有人可以帮助我!如果您需要更多解释,请随时提出!

亲切的问候,并提前多多感谢!

1 个答案:

答案 0 :(得分:2)

fetchValueUsingBindingIntoObjects:采用“id”,这意味着支持KVC的任何对象都会这样做:

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

通过这种方式,您可以获取有关任何表单的数据,并使用它将其发送回网络。