我确实搜索了一下如何检查NSDictionary密钥是否存在,并提出了解决方案。但它仍然抛出一个错误,告诉我向键添加空值。我不确定我的代码是否正确。如果任何人对此有任何想法可以帮助我。
NSDictionary *result;
id myImageURL = [result objectForKey:@"url"];
if ((NSNull *)myImageURL == [NSNull null])
myImageURL = @"";
id myImage = [result objectForKey:@"image"];
if ((NSNull *)myImage == [NSNull null])
myImage = @"";检查是否为空,不添加任何内容,如果不为空,则添加值。但它仍然给我一个错误,我不知道为什么。
/****OUTPUT*****/
2011-08-11 14:56:06.668 Tab_Table_Win[6510:207] RESULTS : {
image = "<UIImage: 0xbc332c0>";
url = "http://a3.twimg.com/profile_images/999228511/normal.jpg";
}
2011-08-11 14:56:06.669 Tab_Table_Win[6510:207] url : http://a3.twimg.com/profile_images/999228511/normal.jpg
2011-08-11 14:56:06.670 Tab_Table_Win[6510:207] IMage : <UIImage: 0xbc332c0>
/*****Breaks Here ***/
2011-08-11 14:56:06.876 Tab_Table_Win[6510:207] RESULTS : {
}
2011-08-11 14:56:06.878 Tab_Table_Win[6510:207] url : (null)
2011-08-11 14:56:06.879 Tab_Table_Win[6510:207] IMage : (null)
2011-08-11 14:56:06.881 Tab_Table_Win[6510:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary setObject:forKey:]: attempt to insert nil key'发布于 2011-08-12 04:16:48
正确答案是:
NSDictionary *result;
NSURL *myImageURL = [result objectForKey:@"url"];
UIImage *myImage = [result objectForKey:@"image"];
/**** Correct way ****/
if (myImageURL != nil && myImage != nil) {
[images setObject:myImage forKey:myImageURL];
}谢谢你的解释。
发布于 2014-10-03 23:56:24
汤米完美地解释了这一点。
我建议创建一个NSDictionary类的扩展,如下所示:
#import <Foundation/Foundation.h>
@interface NSDictionary (Safety)
- (id)safeObjectForKey:(id)aKey;
@end和实现文件:
#import "NSDictionary+Safety.h"
@implementation NSDictionary (Safety)
- (id)safeObjectForKey:(id)aKey {
NSObject *object = self[aKey];
if (object == [NSNull null]) {
return nil;
}
return object;
}
@end而不是在代码中使用[dictionary objectForKey:@"keyName"];,而是使用
[dictionary safeObjectForKey:@"keyName"];这样,正如Tommy解释的那样,您将向nil发送一个方法调用,这不会使应用程序崩溃,但您的对象将获得nil值。
希望这能有所帮助。
发布于 2011-08-12 03:51:46
每当我尝试检查从字典返回的对象是否为空时,我都会这样做:
id obj = [myDictionary objectForKey:entityKeyName];
if (obj == [NSNull null]) {
// do something
}那么在你的代码中,它应该是:
NSDictionary *result;
NSString *myImageURL = [result objectForKey:@"url"];
if (myImageURL == [NSNull null])
myImageURL = @"";这就是我在你的代码中要做的。
另外,只是确认一下,是否定义了NSDictionary结果?在您的代码中,它没有设置任何内容。它只是被定义为您计划使用调用的结果的变量
https://stackoverflow.com/questions/7031688
复制相似问题