gpt4 book ai didi

iOS 如何检查 valueForKey 是否存在?

转载 作者:行者123 更新时间:2023-11-28 19:49:04 25 4
gpt4 key购买 nike

我还有一个关于检查 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 incase XCode 告诉我: *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*** -[__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 作为指针返回,但我不知道如何检查指针是否为 null(如果我是正确的,则在 Objective-C 中为 nil)。请帮助我。

更新:我试过使用 objectForKey,这里是一个代码(_jsonId objectForKey 是 nil,我知道要尝试测试代码)

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'

这让我发疯......

最佳答案

_jsonId 定义为:

id _jsonId = [NSJSONSerialization JSONObjectWithData:[_json dataUsingEncoding:NSUTF8StringEncoding] options:0 error:&_error];

... 将是数组或字典。根据您的代码,我认为您假设它始终是一本字典。所以你可能想添加:

if (![_jsonId isKindOfClass:[NSDictionary class]]) ...

然后你想知道字典里有什么,如果有的话。所以使用 objectForKey:。或者,更好的是,只是 _jsonId[@"Mon"]。你会得到一个对象,或者你会得到 nil

valueForKey: 是一种完全不同的机制,键值编码。它是在 NSObject 上定义的,因此由 NSDictionary 以及其他所有内容继承。它被定义为引发未知 key 的异常。由于它引发异常而不是返回结果,因此您尝试比较结果是无效的。

关于iOS 如何检查 valueForKey 是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30261319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com