Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 存储在NSDictionary中的字符串值_Iphone_Objective C_Nsdictionary - Fatal编程技术网

Iphone 存储在NSDictionary中的字符串值

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

我试图实现这个按钮操作,但是if语句的计算结果不是真的。我有一种情况,即“学校”词典中的值并不总是存储有网站。出于这个原因,我想检查,但我要检查什么。如果在没有值的情况下没有存储“nil”,那么是什么

 -(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:
,用于执行此操作。非常方便!通过这种方式尝试,结果是肯定的,即使没有任何东西。我相信钥匙会在那里,我只是想检查是否有一个值,然后你可能有一个空字符串:看看我的答案,从整体的角度来看。。。如果没有当前学校的网站信息,请不要填空