我正在开发一个App,它返回用户在tableView中搜索的一些JSON数据。有时会返回一个空键,如果选择选择,它似乎会崩溃我的应用程序。我已经查找了其他解决方案,但无论我如何设置“if”检查,它仍然会崩溃。
第一个是奇怪的,它可以工作,但在文本视图中显示数据“{}”而不是“不可用...”为什么?
if ([gameDetails objectForKey:@"description"] !=nil) {
gameDescription.text = [NSString stringWithFormat:@"%@", [gameDetails objectForKey:@"description"]];
}
else
{
gameDescription.text = [NSString stringWithFormat:@"Not Available..."];
}
无论我如何设置,下一个都会崩溃。
if ([gameDetails objectForKey:@"box_front"] != nil) {
NSURL *coverImage = [NSURL URLWithString:[gameDetails objectForKey:@"box_front"]];
NSData *imageLink = [NSData dataWithContentsOfURL:coverImage];
coverArt.image = [UIImage imageWithData:imageLink];
}
else
{
NSLog(@"No Photo");
}
有人可以告诉我为什么这些导致我的应用程序继续崩溃?如果我需要更多信息,请告诉我。
答案 0 :(得分:4)
NSURL *coverImage = [NSURL URLWithString:[gameDetails objectForKey:@"box_front"]];
//你必须检查coverImage是不是nil然后只需你做以下操作。否则写一些关于nil的信息。
NSData *imageLink = [NSData dataWithContentsOfURL:coverImage];
coverArt.image = [UIImage imageWithData:imageLink];
//要检查nil或null,您可以使用以下代码。
if([[itemDataDict valueForKey:@"ItemNo"] isKindOfClass:[NSString class]])
{
if([[itemDataDict valueForKey:@"ItemNo"] isEqualToString:@""] || [[itemDataDict valueForKey:@"ItemNo"] isEqualToString:@"<null>"])
{
txtItemNo.text = @"";
}
else
{
txtItemNo.text = [NSString stringWithFormat:@"%@",[itemDataDict valueForKey:@"ItemNo"]];
}
}
else
{
txtItemNo.text = @"";
}
如果您需要更多信息,请与我们联系。
答案 1 :(得分:1)
由于下面一行
,它第二次崩溃NSURL *coverImage = [NSURL URLWithString:[gameDetails objectForKey:@"box_front"]];
和
if ([gameDetails objectForKey:@"box_front"] != nil)
你的if条件总是不是假的,有时你得到一些其他的值,如(null)
或NSNull
,这与nil
不同,NSURL
语句会崩溃如果您提供的不是NSString
。
为了避免这种情况,您可以检查[gameDetails objectForKey:@"box_front"]
你得到了什么......
我建议你可以使用下面的一些宏
#define IsEmpty(value) (value == (id)[NSNull null] || value == nil || ([value isKindOfClass:[NSString class]] && ([value isEqualToString:@""] || [value isEqualToString:@"<null>"]))) ? YES : NO
#define IfNULL(original, replacement) IsNULL(original) ? replacement : original
#define IsNULL(original) original == (id)[NSNull null]
#define SafeString(value) IfNULL(value, @"")
然后使用下面的检查
if (SafeString([gameDetails objectForKey:@"box_front"]).length != 0)
我希望它有效。
干杯。