gpt4 book ai didi

ios - iOS10 中 isKindOfClass 面临的问题

转载 作者:行者123 更新时间:2023-12-01 20:03:24 25 4
gpt4 key购买 nike

最近升级了 XCode8 我在 isKindOfClass 中遇到问题这段代码一直有效到 iOS9 的方法但在 iOS10突然[items isKindOfClass: [NSMutableArray class]]编译器没有进入 for 循环条件我可以知道是什么原因吗?
NSMutableArrayNSArray 的子类所以当我更改为 [NSArray class]那么它工作正常,所以我很困惑为什么这个更改会影响到 NSMutableArray作为 NSArray 的子类的类?

     NSMutableArray *items = [jsonDictionary objectForKey:@"items"]; // Here i am taking response in NSMutableArray

if ([items isKindOfClass: [NSMutableArray class]] && items != nil) // not working {
for (NSMutableDictionary *item in items)
{
// Rest of Code
}
}

这段代码对我有用 我混淆了上面的代码,直到 iOS9当我在 iOS10 工作后更改以下代码时:
     NSMutableArray *items = [jsonDictionary objectForKey:@"items"];

if ([items isKindOfClass: [NSArray class]] && items != nil) // Changed to NSArray {
for (NSMutableDictionary *item in items)
{
// Rest of Code
}
}

最佳答案

从您的评论看来,您实际上有一个 NSArray ,而不是 NSMutableArray , 所以 isKindOfClass工作正常。除非您另行指定,否则 AFN 将提供不可变容器,这在 iOS 10 上应该没有什么不同,所以我不确定它为什么以前可以工作。

与其测试可变数组,不如创建一个可变副本可能更简单,这样您就不必尝试优雅地处理“失败”条件:

NSArray *items = [jsonDictionary objectForKey:@"items"];
if (items != nil) {
NSMutableArray *mutableItems = [items mutableCopy];
for (NSMutableDictionary *item in mutableItems)
{
// Rest of Code
}
}

请注意,除非您已指定 AFN 选项以提供可变容器,否则 items 中的字典数组将是 NSDictionary不是 NSMutableDictionary ,因此您可能需要制作它们的可变副本。

当然,如果您不改变数组或字典,那么您可以使用 NSArrayNSDictionary不管你是否有一个可变或不可变的对象。

关于ios - iOS10 中 isKindOfClass 面临的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39523642/

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