0

このボタンアクションを実装しようとしていますが、ifステートメントがtrueと評価されていません。その「学校」辞書の値に、常にWebサイトが保存されているとは限らないという状況があります。そのため、確認したいのですが、何を確認しますか。値がないときに「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];

}
}
4

4 に答える 4

3

Webサイトが空の文字列である可能性がある場合は、次を使用する必要があります。

if(![School objectForKey:WEBSITE_KEY] 
   || ([[School objectForKey:WEBSITE_KEY] isKindOfClass:[NSString class]] && [(NSString*)[School objectForKey:WEBSITE_KEY] length]==0)){
    // no website
} else { /* has website*/ }
于 2010-01-14T14:24:20.823 に答える
1

NSDictionaryにnilを含めることはできません。キーが存在する場合は、オブジェクトが含まれている必要があります。特定のキーに対して定義されたオブジェクトがない場合、メソッドobjectForKey:は戻ります。nilただし[NSNull null]、辞書または配列にnullプレースホルダーとして格納できます。だからあなたはそれをチェックすることができます、それはすべてあなたの辞書がどのように入力されているかに依存します。

[School objectForKey:WEBSITE_KEY] == nil || [School objectForKey:WEBSITE_KEY] == [NSNull null]

また、@""をnilまたは値なしと混同しないようにしてください。nilでも[NSNullnull]でもない場合は、ログに記録し、保存されているオブジェクトを確認することをお勧めします。

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
}

他の人が辞書に入力するため、辞書に何が格納されているのか正確にわからない場合があるため、これを使用すると便利です。あなたは決して注意しすぎることはできません!

于 2010-01-14T14:06:26.397 に答える
1

NSLogキーのオブジェクトを印刷するために使用しようとしましたか?

NSLog(@"School[WEBSITE_KEY]=<%@>", [School objectForKey:WEBSITE_KEY]);

多分それはゼロではありませんか?

于 2010-01-14T14:06:44.320 に答える
1

エントリがあるかどうかを確認して、要求された学校がNSDictionaryにあるかどうかを確認します

BOOL containsKey = [[School allKeys] containsObject:WEBSITE_KEY];

学校のWebサイトがない場合は、WEBSITE_KEYのディレクトリエントリはありません。

于 2010-01-14T14:07:40.443 に答える