Iphone 存储在NSDictionary中的字符串值
我试图实现这个按钮操作,但是if语句的计算结果不是真的。我有一种情况,即“学校”词典中的值并不总是存储有网站。出于这个原因,我想检查,但我要检查什么。如果在没有值的情况下没有存储“nil”,那么是什么Iphone 存储在NSDictionary中的字符串值,iphone,objective-c,nsdictionary,Iphone,Objective C,Nsdictionary,我试图实现这个按钮操作,但是if语句的计算结果不是真的。我有一种情况,即“学校”词典中的值并不总是存储有网站。出于这个原因,我想检查,但我要检查什么。如果在没有值的情况下没有存储“nil”,那么是什么 -(IBAction) btnVisitWebsite_clicked :(id)sender { if([School objectForKey:WEBSITE_KEY] == nil){ UIAlertView *NoWebsite = [[UIAlertView alloc]i
-(IBAction) btnVisitWebsite_clicked :(id)sender {
if([School objectForKey:WEBSITE_KEY] == nil){
UIAlertView *NoWebsite = [[UIAlertView alloc]initWithTitle: @"No Website"
message:@"The selected school has not listed a website"
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
NoWebsite.tag = 15;
[NoWebsite show];
[NoWebsite release];
NoWebsite = nil;
}
else{
NSMutableString *WebsiteVisit = [[NSMutableString alloc] initWithString: @"http://"];
[WebsiteVisit appendString:[School objectForKey:WEBSITE_KEY]];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: WebsiteVisit]];
[WebsiteVisit release];
}
}
NSDictionary不能包含nil。如果密钥存在,它必须包含一个对象。如果没有为特定键定义对象,则
objectForKey:
方法将返回nil
。但是,您可以将[NSNull null]
存储为字典或数组中的空占位符。所以你可以检查一下,这完全取决于你的字典是如何填充的
[School objectForKey:WEBSITE_KEY] == nil || [School objectForKey:WEBSITE_KEY] == [NSNull null]
还要确保不要将@“”与零或无值混淆。如果它不是nil和[NSNull null],那么最好记录它,也许可以查看存储的对象:
NSLog(@"Description: %@", [School objectForKey:WEBSITE_KEY]);
NSLog(@"Class: %@", [[School objectForKey:WEBSITE_KEY] class]);
如果该类返回NSString或NSCFString,则看起来它包含空字符串。你可以查一下。以下是完整的声明:
id schoolWebsite = School objectForKey:WEBSITE_KEY];
if (schoolWebsite && schoolWebsite != [NSNull null] && [schoolWebsite isKindOfClass:[NSString class]] && [schoolWebsite length] > 0)) {
// There is definitely a non-empty string for that key!
} else {
// Not valid
}
这将是很好的使用,因为您可能不确定字典中到底存储了什么,因为其他人将填充它。你再小心也不为过 NSDictionary不能包含nil。如果密钥存在,它必须包含一个对象。如果没有为特定键定义对象,则
objectForKey:
方法将返回nil
。但是,您可以将[NSNull null]
存储为字典或数组中的空占位符。所以你可以检查一下,这完全取决于你的字典是如何填充的
[School objectForKey:WEBSITE_KEY] == nil || [School objectForKey:WEBSITE_KEY] == [NSNull null]
还要确保不要将@“”与零或无值混淆。如果它不是nil和[NSNull null],那么最好记录它,也许可以查看存储的对象:
NSLog(@"Description: %@", [School objectForKey:WEBSITE_KEY]);
NSLog(@"Class: %@", [[School objectForKey:WEBSITE_KEY] class]);
如果该类返回NSString或NSCFString,则看起来它包含空字符串。你可以查一下。以下是完整的声明:
id schoolWebsite = School objectForKey:WEBSITE_KEY];
if (schoolWebsite && schoolWebsite != [NSNull null] && [schoolWebsite isKindOfClass:[NSString class]] && [schoolWebsite length] > 0)) {
// There is definitely a non-empty string for that key!
} else {
// Not valid
}
这将是很好的使用,因为您可能不确定字典中到底存储了什么,因为其他人将填充它。你再小心也不为过 您是否尝试使用
NSLog
打印密钥的对象
NSLog(@"School[WEBSITE_KEY]=<%@>", [School objectForKey:WEBSITE_KEY]);
NSLog(@“学校[网站密钥]=”,[学校对象密钥:网站密钥]);
可能不是零?您是否尝试使用
NSLog
打印密钥的对象
NSLog(@"School[WEBSITE_KEY]=<%@>", [School objectForKey:WEBSITE_KEY]);
NSLog(@“学校[网站密钥]=”,[学校对象密钥:网站密钥]);
可能不是零?通过检查所请求的学校是否有条目,查看其是否在NSDictionary中
BOOL containsKey = [[School allKeys] containsObject:WEBSITE_KEY];
如果没有学校网站,则不应该有网站密钥的目录条目。通过检查请求的学校是否有条目,查看其是否在NSDictionary中
BOOL containsKey = [[School allKeys] containsObject:WEBSITE_KEY];
如果没有学校网站,则不应存在网站密钥的目录条目。如果网站可能是空字符串,则应使用以下内容:
if(![School objectForKey:WEBSITE_KEY]
|| ([[School objectForKey:WEBSITE_KEY] isKindOfClass:[NSString class]] && [(NSString*)[School objectForKey:WEBSITE_KEY] length]==0)){
// no website
} else { /* has website*/ }
如果网站可能是空字符串,则应使用以下内容:
if(![School objectForKey:WEBSITE_KEY]
|| ([[School objectForKey:WEBSITE_KEY] isKindOfClass:[NSString class]] && [(NSString*)[School objectForKey:WEBSITE_KEY] length]==0)){
// no website
} else { /* has website*/ }
根据文档,如果NSDictionary没有与键关联的值,objectForKey:将返回nil。我要补充的是,您应该在字典中创建键-值对时插入NSNull对象。NSNull是一个实际的对象,您可以像对待任何其他值一样对待它。出于测试目的,现在由我自己填充它。但当应用程序完成后,它将被一个每天从办公室工作人员那里获取输入的服务器填充。谢谢,但felix的回答得到了根据文档,如果NSDictionary没有与密钥相关的值,objectForKey:将返回nil。我要补充的是,您应该在字典中创建键值对的位置插入NSNull对象。NSNull是一个实际的对象,您可以像对待任何其他值一样对待它。出于测试目的,现在由我自己填充它。但是当应用程序完成后,它将被一个每天从办公室工作人员那里获取输入的服务器填充。谢谢,但是felix的回答得到了它。如果没有任何打印,那么日志语句将永远不会执行。如果等号后面没有任何内容,则该位置有一个空字符串。“我同意。如果在“”之间没有打印任何内容,则还必须针对空字符串进行测试。如果根本没有打印任何内容,则永远不会执行log语句。如果等号后面没有任何内容,则该位置有一个空字符串。“我同意。如果在“”之间没有打印任何内容,那么您还必须针对空字符串进行测试。我创建了一个名为
keyExists:
的好的NSDictionary
分类方法来执行此操作。非常方便!通过这种方式尝试,结果是肯定的,即使没有任何东西。我相信钥匙会在那里,我只是想检查是否有一个值,然后你可能有一个空字符串:看看我的答案,从整体的角度来看。。。如果没有当前学校的网站信息,不要在字典中填入空字符串。你最终会在你的应用程序数据生态系统中携带虚假数据,并执行“错误”的检查。这里的检查应该是“是否有网站URL”不是“是否有网站URL不是空的”。。。通常(可能不适用于您的示例),字典的生产者应该负责验证插入的数据。不管怎样,这种方法对我来说通常很有效。。。我创建了一个很好的NSDictionary
category方法,名为keyExists:
,用于执行此操作。非常方便!通过这种方式尝试,结果是肯定的,即使没有任何东西。我相信钥匙会在那里,我只是想检查是否有一个值,然后你可能有一个空字符串:看看我的答案,从整体的角度来看。。。如果没有当前学校的网站信息,请不要填空