Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ios5中高效地添加具有空值的NSDictionary键_Ios_Objective C_Ios7_Nsdictionary_Nsnull - Fatal编程技术网

在ios5中高效地添加具有空值的NSDictionary键

在ios5中高效地添加具有空值的NSDictionary键,ios,objective-c,ios7,nsdictionary,nsnull,Ios,Objective C,Ios7,Nsdictionary,Nsnull,我试图在字典中添加一些带有键的值,以便将请求发布到服务器。我在ios7上没有问题,但在ios5中创建字典时有问题,当输入空值时,它不会在字典中插入该键或随后插入该键。这是我的代码示例 NSLog(@"name:%@, address:%@,city:%@, state:%@, country:%@, postal:%@ ,phone:%@,age:%@, gender:%@",self.pop.firstNameTextField.text,self.pop.addressTextField.t

我试图在字典中添加一些带有键的值,以便将请求发布到服务器。我在ios7上没有问题,但在ios5中创建字典时有问题,当输入空值时,它不会在字典中插入该键或随后插入该键。这是我的代码示例

NSLog(@"name:%@, address:%@,city:%@, state:%@, country:%@, postal:%@ ,phone:%@,age:%@, gender:%@",self.pop.firstNameTextField.text,self.pop.addressTextField.text, self.pop.cityTextField.text,[NSNumber numberWithInt:stateId],[NSNumber numberWithInt:countryId],self.pop.postalCodeTextField.text,self.pop.phoneNumberTextField.text,self.pop.ageTextField.text,self.pop.genderTextField.text);


NSDictionary *details = [NSDictionary dictionaryWithObjectsAndKeys:
                          self.pop.firstNameTextField.text,@"name",
                          self.pop.addressTextField.text,@"address",
                          self.pop.cityTextField.text,@"city",
                          [NSNumber numberWithInt:stateId],@"state",
                          [NSNumber numberWithInt:countryId],@"country",
                          self.pop.postalCodeTextField.text,@"postalCode",
                          self.pop.phoneNumberTextField.text,@"phoneNo",
                          self.pop.ageTextField.text,@"age",
                          self.pop.genderTextField.text,@"gender",
                          nil];


NSLog(@"MyDetails:%@",details);
在ios 7中记录结果:

name: GamerLegend,address:india,city:, state:1, country:1, postal: ,phone:, age:, gender:
MyDetails:
{
    address = India;
    age = "";
    city = "";
    country = 1;
    gender = "";
    name = "GamerLegend";
    phoneNo = "";
    postalCode = "";
    state = 1;
}
name: GamerLegend,address:haripad,city:(null), state:1, country:1, postal:(null) ,phone:(null), age:(null), gender:(null)
MyDetails:
{
    address = India;
    name = "GamerLegend";
}
ios5中的相同日志结果:

name: GamerLegend,address:india,city:, state:1, country:1, postal: ,phone:, age:, gender:
MyDetails:
{
    address = India;
    age = "";
    city = "";
    country = 1;
    gender = "";
    name = "GamerLegend";
    phoneNo = "";
    postalCode = "";
    state = 1;
}
name: GamerLegend,address:haripad,city:(null), state:1, country:1, postal:(null) ,phone:(null), age:(null), gender:(null)
MyDetails:
{
    address = India;
    name = "GamerLegend";
}
我希望ios5的日志与ios7的日志相同。我做了一些搜索,我知道我可以事先比较这个值,检查它是否为null,然后用空字符串添加到字典中。但那将是如此乏味。我想知道是否还有其他简单的解决方法。有没有更好的解决办法

这是我目前的解决方案

-(void) checkForNull
{

    if([self.pop.firstNameTextField.text length] == 0)
        self.pop.firstNameTextField.text=@"";

    if([self.pop.addressTextField.text length] == 0)
        self.pop.addressTextField.text=@"";

    if([self.pop.cityTextField.text length] == 0)
        self.pop.cityTextField.text=@"";

    if([self.pop.postalCodeTextField.text length] == 0)
        self.pop.postalCodeTextField.text=@"";

    if([self.pop.phoneNumberTextField.text length] == 0)
        self.pop.phoneNumberTextField.text=@"";

    if([self.pop.ageTextField.text length] == 0)
        self.pop.ageTextField.text=@"18";

    if([self.pop.genderTextField.text length] == 0)
        self.pop.genderTextField.text=@"";
}

如果它符合您的要求,则应该可以:

创建预期键的数组。然后循环执行此操作,并将其与字典中allKeys方法的输出进行比较。如果缺少一个密钥,您可以添加一个空字符串[NSNull null],或者任何可以漂浮您的船的东西。(当然,您需要使字典可变)

大概是这样的:

for (NSString *expectedKey in allExpectedKeys) {
    BOOL keyMissing = YES;
    for (NSString *existingKey in [dictionary allKeys]) {

        if ([expectedKey isEqualToString:existingKey]) {
            keyMissing = NO;
            break;
        }
    }
    if (keyMissing) {
        [dictionary setObject:[NSNull null] forKey:expectedKey];
    }
}

不能将nil/null添加到字典中。“如果键或值对象为零,则引发NSInvalidArgumentException。”请尝试将条件if([self.pop.firstNameTextField.text length]==0)更改为if([self.pop.firstNameTextField.text length]==0 | |[self.pop.firstNameTextField.text IsequalString:@”(null)])