строковое значение хранится в NSDictionary - PullRequest
0 голосов
/ 14 января 2010

Я пытаюсь реализовать это действие кнопки, но оператор 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];

}
}

Ответы [ 4 ]

3 голосов
/ 14 января 2010

Если возможно, что Сайт является пустой строкой, вы должны использовать следующее:

if(![School objectForKey:WEBSITE_KEY] 
   || ([[School objectForKey:WEBSITE_KEY] isKindOfClass:[NSString class]] && [(NSString*)[School objectForKey:WEBSITE_KEY] length]==0)){
    // no website
} else { /* has website*/ }
1 голос
/ 14 января 2010

Вы пытались использовать NSLog для печати объекта для ключа?

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

Может это не ноль?

1 голос
/ 14 января 2010

Проверьте, есть ли запрашиваемая школа в NSDictionary, проверив, есть ли в ней запись

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

Если школьный веб-сайт отсутствует, в WEBSITE_KEY не должно быть записи в каталоге.

1 голос
/ 14 января 2010

NSDictionary не может содержать ноль. Если ключ существует, он должен содержать объект. Метод objectForKey: вернет nil, если для определенного ключа не определен объект. Однако вы можете сохранить [NSNull null] в качестве пустого заполнителя в словаре или массиве. Так что вы можете проверить это, все зависит от того, как заполнен ваш словарь.

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

Также убедитесь, что вы не путаете @ "" с нулем или без значения. Если это не ноль и не [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
}

Это будет хорошо для использования, поскольку вы можете быть не уверены, что именно хранится в словаре, так как другие будут его заполнять. Вы никогда не можете быть слишком осторожны!

...