lif*_*son 14 iphone objective-c nsdictionary nsstring
我确实搜索了如何检查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 = @"";
Run Code Online (Sandbox Code Playgroud)
检查null是否添加任何内容,如果不添加该值.但它仍然给我一个错误,不知道为什么.
/****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'
Run Code Online (Sandbox Code Playgroud)
lif*_*son 14
正确的答案是:
NSDictionary *result;
NSURL *myImageURL = [result objectForKey:@"url"];
UIImage *myImage = [result objectForKey:@"image"];
/**** Correct way ****/
if (myImageURL != nil && myImage != nil) {
[images setObject:myImage forKey:myImageURL];
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的所有解释.
C0D*_*0D3 14
汤米完美地解释了这一点.
我建议创建一个NSDictionary类的扩展,如:
#import <Foundation/Foundation.h>
@interface NSDictionary (Safety)
- (id)safeObjectForKey:(id)aKey;
@end
Run Code Online (Sandbox Code Playgroud)
和实施文件:
#import "NSDictionary+Safety.h"
@implementation NSDictionary (Safety)
- (id)safeObjectForKey:(id)aKey {
NSObject *object = self[aKey];
if (object == [NSNull null]) {
return nil;
}
return object;
}
@end
Run Code Online (Sandbox Code Playgroud)
而不是[dictionary objectForKey:@"keyName"];
在您的代码中使用,请使用
[dictionary safeObjectForKey:@"keyName"];
Run Code Online (Sandbox Code Playgroud)
这样,正如Tommy所解释的那样,你将向nil发送一个方法调用,它不会使应用程序崩溃,但你的对象会得到一个零值.
希望这可以帮助.
以下答案对我有用:
if ([dictionary objectForKey:key]) {
// previously stored data for "key"
}
Run Code Online (Sandbox Code Playgroud)
另请注意,您可以使用字典获取字典中的数组
[dictionary allKeys]
Run Code Online (Sandbox Code Playgroud)
每当我尝试检查从字典返回的对象是否为空时,我这样做:
id obj = [myDictionary objectForKey:entityKeyName];
if (obj == [NSNull null]) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
然后在您的代码中,它将是:
NSDictionary *result;
NSString *myImageURL = [result objectForKey:@"url"];
if (myImageURL == [NSNull null])
myImageURL = @"";
Run Code Online (Sandbox Code Playgroud)
这就是我在你的代码中所做的.
另外,确定是否定义了NSDictionary结果?在您的代码中,它没有任何设置.它只是被定义为您计划使用调用结果的变量
NSDictionary *result;
NSString *myImageURL = [result objectForKey:@"url"];
if (myImageURL == NULL)
myImageURL = @"";
NSString *myImage = [result objectForKey:@"image"];
if (myImageURL == NULL)
myImage = @"";
Run Code Online (Sandbox Code Playgroud)
看看这是否有效,而不是过度考虑 NULL 类。
归档时间: |
|
查看次数: |
53555 次 |
最近记录: |