【发布时间】:2015-05-15 13:55:34
【问题描述】:
我还有一个关于检查 valueForKey 是否存在的问题。 这是我的代码:
id _jsonId = [NSJSONSerialization JSONObjectWithData:[_json dataUsingEncoding:NSUTF8StringEncoding] options:0 error:&_error];
Monday = [[NSMutableArray alloc] init];
if ([_jsonId valueForKey:@"Mon"]!= Nil) {
_keyMon = [_jsonId valueForKey:@"Mon"];
[Monday addObject:@"Monday"];
for (int i=0; i<5; i++) {
if ([_keyMon objectAtIndex:i]!=[NSNull null]) {
[Monday addObject:[_keyMon objectAtIndex:i]];
}
}
} else {
[_keyTues addObject:@"No Class For Today"];
[Monday addObject:[_keyMon objectAtIndex:1]];
}
这个想法是,如果 _jsonId valueForKey 什么都没回来,我可以添加这个 NSStringaddObject:@"No Class For Today 以防 XCode 告诉我:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'
就像它现在告诉我的那样。任何人有任何解决方案?
我试过if ([_jsonId valueForKey:@"Mon"]!= Nil) 没用。
我试过if ([_jsonId valueForKey:@"Mon"]!= nil) 没用。
我试过if ([_jsonId valueForKey:@"Mon"]!= (id)[NSNull null]) 没用。
我试过if ([_jsonId valueForKey:@"Mon"]!= [NSNull null) 没用。
我知道_jsonId valueForKey 作为指针返回,但我不知道如何检查指针是否为空(如果我是正确的,则在Objective-C 中为nil)。请帮帮我。
更新: 我尝试过使用 objectForKey,这是一个代码(_jsonId objectForKey 为零,我知道可以尝试测试代码)
if (_jsonId[@"Sun"]== nil) {
[_keySun addObject:@"No Class For Today"];
[Monday addObject:[_keySun objectAtIndex:1]];
}
else{
_keySun = [_jsonId objectForKey:@"Sun"];
[Monday addObject:@"Sunday"];
for (int i=0; i<5; i++) {
if ([_keySun objectAtIndex:i]!=nil) {
[Monday addObject:[_keySun objectAtIndex:i]];
}
}
}
不过,XCode 告诉我我要在 NSArray 中添加一个 nil。
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'
这快把我逼疯了……
【问题讨论】:
-
objectForKey有什么问题? -
@trojanfoe 在某些情况下我可能会遇到一个空的objectForKey,并且我无法将nil对象添加到NSArray中
-
这与它无关。在将对象放入集合类之前,您可以测试(就像现在一样)
nil。 -
@trojanfoe 是的,这正是我一直想做的事情,我试图检测 [_jsonId valueForKey] 是否为零,如果它为零,我可以做一些事情。但我似乎没有做正确的事。
-
首先阅读@Tommy 的回答;他还提倡改用
objectForKey:,并很好地说明了原因。
标签: ios objective-c