0
if ([dictInfoForThisBusiness[@"LikeNumber"] isNotEmpty]) {
    BusinessToSave.numberOfLike =dictInfoForThisBusiness[@"LikeNumber"];
}
else
{
    BusinessToSave.numberOfLike = @(0);
}

if (dictInfoForThisBusiness[@"DislikeNumber"])
{
    BusinessToSave.numberOfDislike =dictInfoForThisBusiness[@"DislikeNumber"];
}
else
{
    BusinessToSave.numberOfDislike =@(0);
}

//BusinessToSave.buildingName =dictInfoForThisBusiness[@"Building"];

if([dictInfoForThisBusiness[@"Building"] isNotEmpty]){
    BusinessToSave.buildingName=dictInfoForThisBusiness[@"Building"];
}
else
{
    BusinessToSave.buildingName =nil;
}


if([dictInfoForThisBusiness[@"Street"] isNotEmpty]){
    BusinessToSave.Street=dictInfoForThisBusiness[@"Street"];
}
else
{
    BusinessToSave.Street =nil;
}

显然,这很混乱,原因很简单。

BusinessToSave是一个托管对象。

通常它应该简单地归零。但是,字典不能包含 nil 值,而是返回 NULL。

所以我不能只做BusinessToSave.buildingName = dictInfoForThisBusiness[@"Building"]

那我该怎么办?

我试过的一件事是:

BusinessToSave.buildingName =(NSString*) [dictInfoForThisBusiness[@"Building"] nilIfNull];

我尝试的另一件事是

BusinessToSave.buildingName =((NSString*) dictInfoForThisBusiness[@"Building"]).nilIfNull;

我不知道为什么点符号可以工作,因为 nilIfNull 返回 id

-(id) nilIfNull
{
    if ([self isKindOfClass:[NSNull class]])
    {
        return self;
    }
    else
    {
        return nil;
    }
}

我终于适应了

[dictInfoForThisBusiness[@"Building"] nilIfNull]如果我期望 NSString,它会起作用。有更好或更标准的方法吗?

4

1 回答 1

3

第一步是尝试摆脱所有其他陈述。只需将此 setup(?) 方法更改为以下内容即可使其更具可读性:

BusinessToSave.numberOfLike = @(0);
if ([dictInfoForThisBusiness[@"LikeNumber"] isNotEmpty]) {
    BusinessToSave.numberOfLike =dictInfoForThisBusiness[@"LikeNumber"];
}

BusinessToSave.numberOfDislike =@(0);
if (dictInfoForThisBusiness[@"DislikeNumber"]){
    BusinessToSave.numberOfDislike =dictInfoForThisBusiness[@"DislikeNumber"];
}

BusinessToSave.buildingName =nil;
if([dictInfoForThisBusiness[@"Building"] isNotEmpty]){
    BusinessToSave.buildingName=dictInfoForThisBusiness[@"Building"];
}

BusinessToSave.Street =nil;
if([dictInfoForThisBusiness[@"Street"] isNotEmpty]){
    BusinessToSave.Street=dictInfoForThisBusiness[@"Street"];
}

如何创建一个方法来为您提供正确的对象(或 nil):

BusinessToSave.buildingName = [self valueForDictKey:@"Building"];

你甚至可以有两种(或更多)不同的方法。(stringForDictKey, integerForDictKey) 等。

BusinessToSave.numberOfLike = [self integerForDictKey:@"LikeNumber"];
BusinessToSave.numberOfDislike = [self integerForDictKey: @"DislikeNumber"];
BusinessToSave.buildingName = [self stringForDictKey: @"Building"];
BusinessToSave.street = [self stringForDictKey @"Street"];

另外:我建议您为所有这些键制作一些#defines,拼错其中一个键名太容易了。:)

BusinessToSave.numberOfLike = [self integerForDictKey:KEY_LIKES];
BusinessToSave.numberOfDislike = [self integerForDictKey: KEY_DISLIKES];
BusinessToSave.buildingName = [self stringForDictKey: KEY_BUILDING];
BusinessToSave.street = [self stringForDictKey KEY_STREET];
于 2013-01-11T06:42:24.870 回答