【问题标题】:If checkbox checked, save NSString to database如果选中复选框,则将 NSString 保存到数据库
【发布时间】:2016-03-13 21:47:42
【问题描述】:

我在我的应用中创建了一个复选框。如果选中该框,我想设置单词“medium”以保存到我的数据库字段。在我的“if checked1 = YES”块中,我创建了一个 NSString 并将其设置为“Medium”。也就是说,在我的提交按钮块中,我应该使用什么样的代码来保存设置的字符串?

从我的数据库返回的 JSON 的结构需要下面的代码才能输入字符串,但我不确定如何重写它以适应 NSString(我之前将它用于 NSArray)?

NSDictionary *bodyValues = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:medium, nil] forKeys:[NSArray arrayWithObjects:@"value", nil]];
NSDictionary *languageDict = [NSDictionary dictionaryWithObject:[NSArray arrayWithObject:bodyValues] forKey:@"und"];

[nodeData setObject:languageDict forKey:@"size"];

我在运行这个块时得到的错误是:

* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“* -[NSDictionary initWithObjects:forKeys:]:对象计数 (0) 与计数不同 钥匙 (1)'

请参阅下面的代码 - 希望我解释清楚,谢谢:

.h

@property (weak, nonatomic) IBOutlet NSString *medium;

.m

- (IBAction)checkButton:(id)sender {
    if (!checked1) {
        [checkboxButton setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal];
        checked1 = YES;

        NSString *medium = @"Medium";

        NSLog(@"button 1");
    }

    else if (checked1) {
        [checkboxButton setImage:[UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal];
        checked1 = NO;
    }
}

- (IBAction)submitPet:(id)sender {
    NSMutableDictionary *nodeData = [NSMutableDictionary new];
    [nodeData setValue: self.dogsName.text forKey:@"title"];
    [nodeData setObject:@"pets" forKey:@"type"];

    NSDictionary *bodyValues = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:medium, nil] forKeys:[NSArray arrayWithObjects:@"value", nil]];
    NSDictionary *languageDict = [NSDictionary dictionaryWithObject:[NSArray arrayWithObject:bodyValues] forKey:@"und"];
    [nodeData setObject:languageDict forKey:@"size"];

    [DIOSNode nodeSave:nodeData success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"Node saved!");
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Node did not save!");
    }];
}

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    我认为您将 nil 传递给您的 dictionaryWithObjects 呼叫之一。您不能将nil 添加到字典中。在添加变量之前,使用nslog 打印出您的变量。

    【讨论】:

    • 出于某种原因,我不断收到警告说 NSString 'medium' 是一个未使用的变量(即使我正在使用它)?我假设它使用的是我的 .h 文件中所述的属性,而不是我的 if checked 语句中设置的 NSString?
    • 你应该设置self.medium = @"Medium";,而不是创建一个新的字符串,这没有做任何事情。然后说arrayWithObjects:self.medium, nil
    • 没有错误,我通过我的 NSLog 得到“节点保存成功”。但是该值似乎没有发布到我的数据库中。我检查了积压,它看到“中”被传递到“大小”字段 - 但它似乎不想保存。我在上面的代码中保存的另一个值(forKey:title)工作得很好。注意:我也试过 [nodeData setObject:self.medium forKey:@"size"];再次,它似乎传递了数据,但没有发生保存。
    • 我们开始在这里提出一个新的问题领域,但我会在设置完所有内容后打印出nodeData,然后再保存以查看实际保存的内容。
    • 打印了nodeData,并且正在保存数据(震惊)。打印出来的是:这是nodeData { Size = { und = ( { value = Medium; } ); };
    猜你喜欢
    • 2012-03-15
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 2012-10-19
    • 2017-03-24
    相关资源
    最近更新 更多